表单验证时如何动态控制某个字段的必填状态?

西门鹤荣 阅读 2

我用的是 Vue 3 + Element Plus,有个场景是:当用户选择“其他”选项时,才需要填写一个额外的输入框。但我发现即使我把该字段的 required 规则动态改成 false,表单校验还是会报错。

我试过在 rules 里用函数返回动态规则,也试过在 change 事件里重新赋值整个 rules 对象,但都不太稳定。下面是我目前的写法:

const rules = reactive({
  reason: [
    {
      required: () => selectedOption.value === 'other',
      message: '请输入具体原因',
      trigger: 'blur'
    }
  ]
})

但这样写好像不生效,校验逻辑没更新。到底该怎么正确实现动态必填呢?

我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
设计师颖萓
把 required 改成函数形式,同时在选项变化时手动触发校验。改成这样:

const rules = reactive({
reason: [{
validator: (rule, value) => {
return selectedOption.value !== 'other' || !!value
},
message: '请输入具体原因',
trigger: 'blur'
}]
})

watch(selectedOption, () => {
formRef.value.validateField('reason')
})


记得在 template 里给 el-form 加上 ref="formRef"。这下应该稳了,别忘了处理好表单引用的初始化。
点赞
2026-03-31 02:08