一、需求:
实现当是否发送消息选择是时,业务类型字段必填。
二、实现:
当你在一个表单中使用
在 Vue 中,你可以使用绑定的方式
在代码中,通过以下几步来实现这个动态验证规则的功能:
-
在模板中:
- 在 "是否发送消息" 这个表单项(
el-form-item )中,我们使用v-model 来绑定用户的选择到form.ifSendMessage 属性。 - 在 "业务类型" 这个表单项的
:rules 属性中,我们使用三元运算符form.ifSendMessage === 1 ? rules.sendAppList : [] 来判断如果 "是否发送消息" 选择为是(值为 1),则应用rules.sendAppList 规则,否则应用空数组[] 。
- 在 "是否发送消息" 这个表单项(
-
在
rules 中:- 在
rules 中,我们为 "是否发送消息" 这个表单项设置了基本的验证规则,确保用户进行选择。 - 在 "业务类型" 这个表单项的验证规则中,我们使用了自定义验证函数。如果用户选择了是(
form.ifSendMessage === 1 ),我们检查是否选择了业务类型,如果没有选择,则返回一个错误,否则返回验证通过。
- 在
这样,当用户选择是发送消息时,业务类型字段就会被要求必填,否则不会被要求必填。
1)关于validator
validator是element表单提供的一个rules验证事件
在 Element UI 表单组件中,
在代码中,我们使用了自定义验证函数来判断 "业务类型" 字段的验证规则。具体来说,我们在
sendAppList: [ { required: true, message: '请选择业务类型', trigger: 'change', validator: (rule, value, callback) => { if (form.ifSendMessage === 1 && (!value || value.length === 0)) { callback(new Error('请选择业务类型')); } else { callback(); } }, }, ],
这里,
这种方式允许你根据不同的场景自定义验证逻辑,从而实现更灵活的表单验证。
2)为什么应用空数组 []
在 Element UI 表单组件中,
在上述代码中,我们为
sendAppList: [ { required: true, message: '请选择业务类型', trigger: 'change', validator: (rule, value, callback) => { if (form.ifSendMessage === 1 && (!value || value.length === 0)) { callback(new Error('请选择业务类型')); } else { callback(); } }, }, ],
在这个验证规则中,我们使用了
当用户选择“否”发送消息时,我们不需要对业务类型字段进行额外的验证,因此为了确保不执行多余的验证逻辑,我们将验证规则设置为空数组
这样就确保了在用户选择“否”发送消息时,不会执行业务类型字段的验证逻辑,达到动态设置验证规则的目的。
3)代码:
<el-form-item label="是否发送消息:" prop="ifSendMessage"> <el-radio-group v-model="form.ifSendMessage"> <el-radio :label="1">是</el-radio> <el-radio :label="0">否</el-radio> </el-radio-group> </el-form-item> <el-form-item label="业务类型:" prop="sendAppList"> <!-- 业务类型字段的内容 --> <el-select v-model="form.sendAppList" multiple filterable clearable collapse-tags style="width: 100%" placeholder="请选择" :rules="form.ifSendMessage === 1 ? rules.sendAppList : []" > <el-option v-for="item in appList" :key="item.itemCode" :label="item.itemName" :value="item.itemCode" > </el-option> </el-select> </el-form-item> rules: { // 其他规则... ifSendMessage: [ { required: true, message: '请选择', trigger: 'change' }, ], sendAppList: [ { required: true, message: '请选择业务类型', trigger: 'change', validator: (rule, value, callback) => { if (form.ifSendMessage === 1 && (!value || value.length === 0)) { callback(new Error('请选择业务类型')); } else { callback(); } }, }, ], },