关于a-form-model-item的校验问题踩坑

关于a-form-model-item表单校验方式

对于vue,使用的比较多的方式为官方给出的

在整个表单外部

<a-form-model :rules="rules">

在每个设置好prop的值,这样整个表单就能对相应的item项进行自动绑定校验

<a-form-model-item prop="ruleName">

对于校验规则,vue2的用data()中设置

data(){

     const checkPerformanceSpec = (rule, value, callback) => {
       //放上校验的代码
      if (optionTure) {
        callback()
      } else {
        callback(new Error('订购时间必须选择'))
      }
    }
    return {
        rules:{
            ruleName: [{ validator: checkPerformanceSpec, trigger: ['blur', 'change'] }]
            //自定义校验规则
            ruleName1: [{ required: true, message: '请选择', trigger: 'change' }]
            //第二种方式
            //第三可以结合一起用
        }
    }
}

vue3.x得去Ant Design Vue中去看咋写

一般的不复杂的情况都能通过上边的解决

异常情况处理:

要监听的表单域不满足自动监听的条件,可以通过如下方式关联表单域:

第一种情况.在这种一个item里嵌套好几个input 的情况

 解决方法antd vue的官网上给出了,亲测有效

这里贴出官方给的方法以及解释:

Form.Item 会对唯一子元素进行劫持,并监听 blur 和 change 事件,来达到自动校验的目的,所以请确保表单域没有其它元素包裹。如果有多个子元素,将只会监听第一个子元素的变化

如果要监听的表单域不满足自动监听的条件,可以通过如下方式关联表单域:

<a-form-model-item prop="form.name" ref="name" :autoLink="false">
  <a-input v-model="other" />
  <span>hahha</span>
  <div>
    <a-input
      v-model="form.name"
      @blur="() => {$refs.name.onFieldBlur()}"
      @change="() => {$refs.name.onFieldChange()}"
    />
  </div>
</a-form-model-item>

注意:

在我代码中,这里的 autoLink我没有使用,也是可以的。

另外,定义的规则一般是用第一种或者第三种

个人理解,就是给外部的item加上ref,内部input通过动作改变ref。

异常情况2:

在一个item中加上一个可选择的table

 这种情况,需要对异常处理1的做法进行进一步修改

具体处理方式:

1.rule的定义采用第一种方式

2.table的rowselection需要进行修改

                <a-table
                :row-selection="rowSelection"
                :columns="columns"
                :data-source="data"/>

改为

      rowSelection: {
        type: 'radio',
        // onChange: (e) => { //onChange与onSelect用一个就行,他们的e的值是不同的
        //   this.onrowSelectChange(e)
        // },
        onSelect: (e) => {
          this.onrowSelectChange(e)
        }
      },

    methods:{
      onrowSelectChange(value) {
          const ref = this.$refs.performanceSpecA
          ref && ref.onFieldChange()
      },
    }

           如果要做赋值和计算操作,并且在校验的时候会用到该值,

           请在ref改变之前进行操作。不然rule校验会先一步进行,会导致校验出错或者出现永远慢一步的情况

网上 还有别的类似方式,

如:

<div class="flex-row">
  <el-form-item label="加班标准" required>
    <div class="flex-row">
      <el-form-item prop="overtime1">
        <el-input v-model="form.overtime1"></el-input>
      </el-form-item>
      <el-form-item prop="overtime2">
        <el-input v-model="form.overtime2"></el-input>
      </el-form-item>
    </div>
  </el-form-item>
</div>

该方法时el-form-item表单中使用,不知道对于我们的a-form-model-item是否可行

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
对于a-form-model动态添加需要校验item,可以通过在el-form-item标签中使用v-if或者v-for指令来实现动态添加。例如,可以根据条件判断是否需要显示某个表单项,如下所示: ```html <a-form-model-item v-if="needValidation" prop="form.name"> <a-input v-model="form.name" /> </a-form-model-item> ``` 同时,还可以通过使用ref属性来获取动态添加的表单项的引用,以便后续进行校验操作。例如,可以将ref属性设置为一个数组,然后在每个动态添加的表单项上使用ref属性并将其添加到数组中,如下所示: ```html <a-form-model> <a-form-model-item v-for="(item, index) in formItems" :key="index" :prop="item.prop" ref="formItemsRef"> <a-input v-model="item.value" /> </a-form-model-item> </a-form-model> ``` 在这个例子中,通过使用v-for指令根据formItems数组的内容动态添加表单项,并将每个动态添加的表单项的ref属性设置为formItemsRef数组中的对应索引值。之后,可以通过this.$refs.formItemsRef来访问动态添加的表单项,以进行校验操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [关于a-form-model-item校验问题](https://blog.csdn.net/qq_35478750/article/details/120381686)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值