前言:
在开发中遇到了蚂蚁的表单以及对v-decorator的使用
一、form表单的使用
1.创建表单
- Ant Design Vue获取表单的数据其实就是使用v-decorator的方式去给每个项去注册,然后才能通过组件去获取表单的数据,同时根据条件校验必填项;
<template>
<a-form :form="form">
<!-- 课程名称 -->
<a-form-item
:labelCol="labelCol"
:wrapperCol="wrapperCol"
label='课程名称:'
>
<a-input
v-decorator="['courseName', { rules: [{ required: true, message: '请填写课程名称' }] }] placeholder="请输入课程名称"/>
</a-form-item>
</a-form>
</template>
export default {
data() {
return {
labelCol: {
xs: { span: 24 },
sm: { span: 7 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 13 },
},
form: this.$form.createForm(this),
}
}
}
2.获取数据的方法
- 通过validateFields的方法,可以校验必填项是否有值,若无,则页面会给出警告!
this.form.validateFields((errors, values) => {
if (errors) {
console.log(values)
}
}
3.自定义校检
- 自带方法是从你开始输入时就在校验,警告一直存在,直到你输入完整才会消失,而且为了更好体验及逻辑的实现,你或许需要自定义
<template>
<a-form :form="form">
<!-- 课程名称 -->
<a-form-item
:labelCol="labelCol"
:wrapperCol="wrapperCol"
label='课程名称:'
>
<a-input
v-decorator="['courseName', { rules: [{ required: true, message: '请填写课程名称' }] }] placeholder="请输入课程名称"/>
</a-form-item>
</a-form>
<a-button @click="handleCancel">取消</a-button>
<a-button :loading="confirmLoading" type="primary" @click="handleNext(courseStep)">
{{ (courseStep === 1 && '完成') || '下一步' }}
</a-button>
</template>
const stepForms = [['courseName']]
export default {
data() {
return {
labelCol: {
xs: { span: 24 },
sm: { span: 7 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 13 },
},
form: this.$form.createForm(this),
confirmLoading: false,
courseStep: 0,
}
},
methods:{
handleNext(step) {
const {
form: { validateFields },
} = this
const courseStep = step + 1
if (courseStep <= 1) {
validateFields(stepForms[this.courseStep], (errors, values) => {
if (!errors) {
this.courseStep = courseStep
}
})
return
}
},
}
4.对默认项进行赋值
- 只有通过setFieldsValue方式给表单赋值,才能获取到表单的值,其他设置默认值的方式,获取不到表单默认值。
this.form.setFieldsValue({
courseName: '这是赋值操作',
})
5.清空表单数据
- this.form.resetFields()可以清空填写的表单数据
handleCancel() {
this.form.resetFields()
},
这里有监听失去焦点后就校检的文章