ant design vue 之 v-decorator

1.在 template 中直接使用

required: true 设置必填, trigger: 'blur' 设置失去焦点触发校验
<a-input
  v-decorator="['name', { rules: [{ required: true, message: '请输入账号!'}],trigger: 'blur' }]" 
 />

2.在 script 中设置校验规则

template 部分
 <a-input
   v-decorator="['password', validatorRules.password]"
 />
script 部分
   data(){
    return {
       form: this.$form.createForm(this),
       validatorRules: {
          password : {//name与v-decorator中属性对应
            initialValue: 123456,//初始值
            rules: [
              { required: true, message: '请输入密码!'},//此处开启校验必填
              { min: 5, message: '长度不少于 5 个字符'}, // 长度校验
              { validator: this.validatePassword},//校验规则函数,
            ],
            trigger: 'blur' // 触发方式
          },
        },
    }
  },
   methods: {
      validatePassword(rule, value, callback) {
      
      }
  }

3. 完整代码

<template>
  <div class="login">
    <a-form :form="form" :label-col="{ span: 5 }" :wrapper-col="{ span: 12 }" @submit="handleSubmit">
    <a-form-item label="name">
      <!-- 直接写检验规则 -->
      <a-input
         v-decorator="['name', { rules: [{ required: true, message: '请输入账号!'}],trigger: 'blur' }]" 
      />
    </a-form-item>
    <a-form-item label="password">
      <!-- 在script 里面定义更复杂的检验规则,  -->
      <a-input
        v-decorator="['password', validatorRules.password]"
      />
    </a-form-item>
    <a-form-item :wrapper-col="{ span: 12, offset: 5 }">
      <a-button type="primary" html-type="submit">
        Login
      </a-button>
    </a-form-item>
  </a-form>
  </div>
</template>

<script>
export default {
  name: 'login',
  data(){
    return {
       form: this.$form.createForm(this),
       validatorRules: {
          password : {//name与v-decorator中属性对应
            initialValue: 123456,//初始值
            rules: [
              { required: true, message: '请输入密码!'},//此处开启校验必填
              { min: 5, message: '长度不少于 5 个字符'}, // 长度校验
              { validator: this.validatePassword},//校验规则函数,
            ],
            trigger: 'blur' // 触发方式
          },
        },
    }
  },
  created(){
    // this.$nextTick(() => {
    //     this.form.setFieldsValue({name:'yyy',password: 123});
    //   })
  },
  mounted(){
    this.form.setFieldsValue({name:'yyy',password: 123});
  },
  methods: {
     handleSubmit(e) {
      e.preventDefault();
      this.form.validateFields((err, values) => {
        if (!err) {
          console.log('Received values of form: ', values);
        }
      });
    },
    validatePassword(rule, value, callback) {
      
    }
  }
}
</script>

注意:

确保使用 this.form.setFieldsValue({name:'yyy',password: 123}) 设置值
或者 this.form.validateFields((err, values) => { }); 获取值
之前
已经 this.$form.createForm(this)

如果在钩子函数里面使用 setFieldsValue 报类似错误

warning.js?d96e:34 Warning: You cannot set a form field before rendering a field associated with the value. You can use `getFieldDecorator(id, options)` instead `v-decorator="[id, options]"` to register it before render.

可以这样试下

this.$nextTick(() => {
  this.form.setFieldsValue({name:'yyy',password: 123});
})
### Ant Design Vue中`v-decorator`初始化 在Ant Design Vue框架内,为了使表单组件能够支持数据双向绑定以及验证功能,通常会利用`this.$form.createForm(this)`方法来创建一个受控的表单实例,并通过`v-decorator`指令关联具体的输入字段与该表单实例中的状态。此过程即为`v-decorator`的初始化[^1]。 对于每一个需要被装饰器管理的输入框或其他类型的表单项而言,在模板部分应当按照如下方式声明: ```html <a-form-model ref="ruleForm"> <a-form-model-item prop="name"> <a-input v-decorator="['name', {rules: [{ required: true, message: 'Please input your name!' }]}]" /> </a-form-model-item> </a-form-model> ``` 上述代码片段展示了如何定义带有必填项规则的名字输入域。其中`prop`属性用于指定当前表单项对应于整个表单模型里的哪一个键名;而`v-decorator`接收的是一个数组参数,第一个元素是要监控的数据路径字符串,第二个可选对象则用来配置额外选项比如校验规则等。 另外值得注意的一点是在脚本区域还需要完成一些必要的设置工作以便让这些配置生效。具体来说就是在Vue组件内部调用`this.$form.createForm(this, options?)`函数并将其返回的结果赋给某个局部变量(常见做法是以`form`命名),之后就可以借助这个引用访问到所有由`v-decorator`所控制着的状态信息了。 ```javascript export default { beforeCreate() { this.form = this.$form.createForm(this); }, }; ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值