【Element Ui】 vue3中修改el-form的rules后不触发自动校验,再次修改rules时清除验证信息

项目要求:类型为“业务备货”的时候,“客户”为必填项

效果如下:

代码如下:

<!--      :validate-on-rule-change="false" 是为了阻止更改rules时立即触发校验-->
<el-form :model="form" ref="orderForm" :rules="formRules" :validate-on-rule-change="false">
        <el-form-item label="类型" prop="type">
          <el-radio-group v-model="form.type" @change="needCustNm">
            <el-radio-button value="1" label="采购备货"></el-radio-button>
            <el-radio-button value="2" label="业务备货"></el-radio-button>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="客户" prop="custNm">
          <el-input v-model="form.custNm" placeholder="请输入客户"></el-input>
        </el-form-item>
</el-form>


......
// 初始化设置
const formRules = ref({
  type: [
    {
      required: true,
      message: '请选择类型',
      trigger: 'change',
    },
  ]
});

// 切换类型时
function needCustNm(){
  if(form.value.type == '2'){
    formRules.value = {
      type: [
        {
          required: true,
          message: '请选择类型',
          trigger: 'change',
        },
      ],
      custNm:[
        {
          required: true,
          message: '请输入客户',
          trigger: 'change',
        },
      ]
    }
  }else{
    formRules.value = {
      type: [
        {
          required: true,
          message: '请选择类型',
          trigger: 'change',
        },
      ]
    }
  //  需要加nextTick,不然获取不到
    nextTick(()=>{
      // 清除校验效果
      proxy.$refs["orderForm"] && proxy.$refs["orderForm"].clearValidate()
    })
  }
}

重点:

 :validate-on-rule-change="false" 是为了阻止更改rules时立即触发校验
nextTick(()=>{
      // 清除校验效果
      proxy.$refs["orderForm"] && proxy.$refs["orderForm"].clearValidate()
})

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3 ,可以使用 `v-model` 指令的 `v-bind` 和 `v-on` 缩写语法糖结合 Element-Plus 的 `el-form` 组件自定义校验规则。具体步骤如下: 1.在 `template` 使用 `el-form` 组件包裹表单,并添加需要校验的表单项。 ```html <el-form ref="form" :model="formData" :rules="rules"> <el-form-item label="用户名" prop="username"> <el-input v-model="formData.username"></el-input> </el-form-item> </el-form> ``` 其,`:model` 属性绑定表单数据,`:rules` 属性绑定校验规则。 2.在 `data` 选项定义表单数据及校验规则。 ```javascript data() { return { formData: { username: '' }, rules: { username: [ { required: true, message: '请输入用户名', trigger: 'blur' }, { validator: this.validateUsername, trigger: 'blur' } ] } } }, ``` 其,`rules` 对象的 `username` 属性表示需要校验的表单项,`required` 表示必填(不能为空),`validator` 表示自定义校验方法,`trigger` 表示校验触发机(此处为失去焦点触发校验)。 3.定义自定义校验方法 `validateUsername`。 ```javascript methods: { validateUsername(rule, value, callback) { if (value.length < 6) { callback(new Error('用户名长度不能少于 6 个字符')) } else { callback() } } } ``` 其,`rule` 表示当前校验规则,`value` 表示当前表单项的值,`callback` 是一个回调函数,用于返回校验结果。如果校验不通过,调用 `callback` 方法并传递一个 `Error` 对象,表示校验不通过并设置错误信息。如果校验通过,调用 `callback` 方法并不传递任何参数。 注意:在自定义校验方法,需要使用 `callback` 方法返回校验结果,否则会出现校验无效的情况。 以上就是使用 Element-Plus 的 `el-form` 组件结合 Vue 3 的语法糖自定义校验规则的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值