一、常规校验,不传参
element ui form表单中给出的实例,以及常规的自定义校验方式
<el-form inline :model="form1" :rules="rules" ref="fules">
<el-table v-if="form1.skuArr" :data="form1.skuArr" stripe border tooltip-effect="dark" style="width: 100%">
<el-table-column label="购买数量限定" align="center" width="180">
<template slot-scope="scope">
<el-form-item :label-width="formLabelWidth" :prop="`skuArr[${scope.$index}].numLimit`" :rules="fules">
<el-input-number v-model="form1.skuArr[scope.$index].numLimit" size="small" :min="0" :max="form1.skuArr[scope.$index].stock" placeholder="输入数字" @change="changNum(scope.$index)">
</el-input-number>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
常规的自定义校验方式如 上边 代码中的 :rules=“fules”
在data中定义fules 的校验规则 例如:
data() {
return {
fules:{required:true, validator:this.validateNum1,type:'number'},
}
},
methods:{
var validateNum1 = (rule, value, callback) => {
if (value === '') {
callback(new Error('不能为空'));
} else if (isNaN(Number(value))) {
callback(new Error('请输入数字'));
} else if (Number(value) <= 0 ) {
callback(new Error('请输入大于0的数字'));
} else {
callback();
}
};
}
二、自定义校验,传参
自定义校验规则传参,比如想要传入下标可以按照(促销价(元)的校验规则进行传递) :rules=“dicRulesVailFn(form1.skuArr[scope.$index])”
<el-form inline :model="form1" :rules="rules" ref="fules">
<el-table v-if="form1.skuArr" :data="form1.skuArr" stripe border tooltip-effect="dark" style="width: 100%">
<el-table-column label="促销价(元)" align="center" width="180">
<template slot-scope="scope">
<el-form-item :label-width="formLabelWidth" :prop="`skuArr[${scope.$index}].actMoney`" :rules="dicRulesVailFn(form1.skuArr[scope.$index])">
<el-input v-model="form1.skuArr[scope.$index].actMoney" size="small" :min="0" :max="form1.skuArr[scope.$index].goodPrice" placeholder="输入数字" @change="changLimite(scope.$index,2)">
</el-input>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
相当于rules 接收了一个函数,所以必须要return 一个值返回回去,参照上边自定义校验规则的常规写法
函数
函数可以这样写把关键参数都返回过去,
methods(){
dicRulesVailFn(row){
var regex = /^\d{1,9}(\.\d{0,2})?$/;
return [{
required: true,
validator: (rule, value, callback) => {
if(!value){
callback(new Error("不能为空!"));
}else if(+value>row.goodPrice){
callback(new Error('金额不能大于商品原价!'));
}else if(+value<=0 ){
callback(new Error('不能小于等于0'));
}else if(!regex.test(value)){
callback(new Error("最多保留2位小数"));
} else {
callback();
}
}, trigger: 'change'
}]
},
}