Ant Design表单使用


一、Form表单

1. 表单创建

在创建表单时注意在 a-form 组件中添加 :form="form" 属性。

此外需要在 data 中对表单进行注册:form: this.$form.createForm(this)

<template>
    <a-form :form="form">
        <!-- content -->
    </a-form>
</template>

<script>
export default {
    data() {
        return {
            // 必须在此进行注册
            form: this.$form.createForm(this)
        }
    }
}
</script>

2. 表单数据

在使用 a-form 表单,当进行数据绑定时,并不建议使用 v-model ,Antd 提供 v-decorator 进行代替,同时更方便配置规则。

</a-form-item>
  <a-input
    placeholder="请输入账号"
    v-decorator="[
      'account', 
      { rules: [{ required: true, message: '账号不能为空!' }] }
    ]"
  />
</a-form-item>

通过 v-decorator 属性参数将输入以对象的形式绑定到 validateFields 方法的 value 中。这里的 error 表示验证输入是否符合我们 v-decorator 中配置的规则。

this.form.validateFields((errors, values) => {
    if (!errors) {
        // 打印对象值
        console.log(values
    }
})

3. 表单值

因为 v-decorator 是单向绑定,所以当需要给组件赋值时需要我们手动操作。

this.form.setFieldsValue({
    account: 'Alex',
    password: '123456'
})

我们也可以对手动获取表单的值,需要注意这里要加 async await 两个关键字。

method: {
    async getValue () {
        const values = await this.form.validateFields()
        console.log(values)
    }
}

二、Model表单

在了解了 a-form 控件使用之后想必你也发现了一个问题,因为其并不支持值双向绑定,当面对大量的数据时手动赋值显然时极其繁杂的。因此 Antd 提供了另一控件: a-form-model ,从控件名字即可看出其支持 v-model 双向绑定,下面就介绍其基本使用。

1. 控件使用

a-form-model 标签添加 :model 实现整个表单对象值绑定,在其子输入标签中与普通双向值绑定一样使用 v-model 进行单项数据绑定。

<template>
  <div>
    <a-form-model
      :model="formData"
    >
      <a-form-model-item
        label="姓名"
        :labelCol="labelCol"
        :wrapperCol="wrapperCol"
      >
        <a-input
          v-model="formData.userName"
          placeholder="请输入联系人"
        />
      </a-form-model-item>
      <a-form-model-item
        label="电话"
        :labelCol="labelCol"
        :wrapperCol="wrapperCol"
      >
        <a-input
          v-model="formData.telephone"
          placeholder="请输入联系方式"
        />
      </a-form-model-item>
    </a-form-model>
  </div>
</template>

<script>
export default {
  name: 'formDemo',
  data () {
    return {
      formData: {
        userName: '',
        telephone: '',
        comment: ''
      }
      // 控制 a-form-model-item 文字布局
      labelCol: {
        xs: { span: 24 },
        sm: { span: 7 }
      },
      // 控制 a-form-model-item 文字布局
      wrapperCol: {
        xs: { span: 24 },
        sm: { span: 13 }
      }
    }
  }
}
</script>

2. 表单规则

model 表单针对规则验证提供一种更为简单的方式,通过 rule 属性即可实现字段验证。

这里说明一下规则中 trigger 属性区别:

  • blur: 当光标从控件上移走则激活验证,常用于 input 等输入性组件。
  • changge: 当值发生变化时激活验证,常用于 date-picker 等选择性组件。
<template>
    <div>
        <a-form-model
            ref="modelForm"
            :rules="rules"
            :model="formData"
        >
            <a-form-model-item
                label="联系人"
                prop="userName"
            >
                <a-input
                v-model="formData.userName"
                placeholder="请输入联系人"
                />
            </a-form-model-item>
        </a-form-model>
    </div>
</template>

<script>
export default {
    data () {
        return {
            rules: {
                // 属性名和 form-item 的 prop 一致
                userName: [
                { required: true, message: '请输入联系人', trigger: 'blur' }
                ],
                telephone: [
                { required: true, message: '请输入联系方式', trigger: 'blur' }
                ]
            }
        }
    }
}
</script>

3. 表单方法

针对配置的表单字段规则,Antd 提供一系列验证方法,下面分别进行介绍。

(1) 规则认证

通过 validate 方法即可验证表单所有字段是否符合设置的规则,并通过红标激活相应的组件。

methods: {
    ok () {
        this.$refs.modelForm.validate(valid => {
            if (valid) {
                this.$message.success('规则验证成功')
            } else {
                this.$message.error('规则验证失败')
            }
        })
    }
}
(2) 单字段认证

通过上述的方法可以实现整个表单的规则验证,但有时间只需要对配置的某个字段进行单独验证,我们则可通过 validateField 实现该需。

需要注意 validateField 返回 valid 并非布尔类型,而是对应字段规则中配置的 message

methods: {
    ok () {
        // 单独验证 userName 字段
        this.$refs.modelForm.validateField('userName', valid => {
            if (valid === '') {
                this.$message.success('规则验证成功')
            } else {
                this.$message.error('规则验证失败')
            }
        })
    }
}
(3) 表单清除

在激活表单认证规则之后如果没有进行清除,那么重新打开页面字段规则的红色提示将仍然存在,因此在取消或者退出页面之后应收手动进行清除。

methods: {
    cancel () {
        // 清除表单值与认证规则
        this.$refs.modelForm.resetFields()
    }
}

文章作者: 烽火戏诸诸诸侯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 烽火戏诸诸诸侯 !
  目录