vue elementui el-form rules动态验证

                    vue elementui el-form rules动态验证

一、介绍

简介:在使用elementUI el-form 中,对于业务不同的时候可能会产生不同表单结构,但是都是存在同一个表单控件el-form中。

图片介绍:

1、在用户选择单选或多选时会有A,B,C,D,E五个选项

2、在用户选择简答题时只会题干,答案以及解析选项(主要是通过v-if来进行判断)

问题引入:当用户选择不同的题库时会产生不同的form表单选项,这个时候在进行表单提交验证的时候就需要根据不同试题类型进行判断,这个时候就需要两个rules来动态进行表单校验。

解决方法:在页面加载的时候在computed方法中进行动态判断直接返回赋值。

代码介绍:

// elementui信息
<el-form :model="addQueTable" ref="addQueTable" :rules="addQueRulesList">
<el-form>

// data中定义rules
updateQusRulesSel:[];
updateQusRules:[];

// computed方法
computed: {
// this.updateQusTable.showSelect自己定义的标识
    updateQusRulesList: function() {
        if (this.updateQusTable.showSelect) {
		    return this.updateQusRulesSel;
	    } else {
		    return this.updateQusRules;
    }
}

总结:在computed中进行值绑定,当该表单显示的时候就会触发(一开始是隐藏的),如果一开始页面加载的时候就触发会无法进行值判断,从而报错。其实能解决问题,通过该种方法。

二、最简单解决方法

在el-form中定义的rules检验字段,如果你的rules中有字段通过v-if进行隐藏,rules是不会对隐藏的字段选项进行判断,只要定义一个完整的rules就行,v-if隐藏的部分不会进入校验方法中。

把简单的问题复杂化了!!!!!

感谢该用户:

Vue中,使用 `element-ui` 的表单组件 `el-form`,可以通过 `rules` 属性来定义表单验证规则。以下是一个简单的例子: ```html <template> <el-form :model="form" :rules="rules" ref="form"> <el-form-item label="姓名" prop="name"> <el-input v-model="form.name"></el-input> </el-form-item> <el-form-item label="年龄" prop="age"> <el-input v-model.number="form.age"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> <script> export default { data() { return { form: { name: '', age: '' }, rules: { name: [ { required: true, message: '请输入姓名', trigger: 'blur' }, { min: 2, max: 10, message: '长度在 2 到 10 个字符', trigger: 'blur' } ], age: [ { required: true, message: '请输入年龄', trigger: 'blur' }, { type: 'number', message: '年龄必须为数字', trigger: 'blur' }, { validator: this.checkAge, trigger: 'blur' } ] } } }, methods: { submitForm() { this.$refs.form.validate(valid => { if (valid) { console.log('表单验证通过') } else { console.log('表单验证失败') } }) }, checkAge(rule, value, callback) { if (value < 18) { callback(new Error('年龄不能小于18岁')) } else { callback() } } } } </script> ``` 在上面的例子中,我们定义了一个表单,包含了两个输入框:姓名和年龄。在 `rules` 属性中,我们为每个输入框定义了一组验证规则。其中,`required` 表示必填项,`min` 和 `max` 分别表示最小值和最大值,`trigger` 表示验证的时机,`blur` 表示失去焦点时验证。对于年龄这个输入框,我们还定义了一个自定义的验证函数 `checkAge`,用来检测年龄是否小于 18 岁。 在表单提交时,我们通过 `this.$refs.form.validate` 方法进行表单验证。这个方法会返回一个布尔值,表示表单验证是否通过。如果验证通过,我们可以提交表单;如果验证失败,我们可以提示用户重新填写表单。 注意,在自定义验证函数中,需要使用 `callback` 回调函数来返回验证结果。如果验证通过,可以直接调用 `callback()`,如果验证失败,需要调用 `callback(new Error('错误信息'))`。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值