- 自定義校驗(yàn)規(guī)則額外參數(shù)
indexConfigRules = {
inputNormalStart: [
{ validator: (rule, value, callback, source, options) => {
// source是跟value的值一致的鍵值對(duì)象
}, trigger: 'blur' }
]
}
- 多個(gè)輸入框校驗(yàn)邏輯一致
/** 指標(biāo)配置驗(yàn)證規(guī)則 */
indexConfigRules = {
inputNormalStart: [
{ validator: (rule, value, callback) => {
this.validateRange(rule, value, callback, 'inputNormalStart', 'inputNormalEnd');
}, trigger: 'blur' }
],
inputNormalEnd: [
{ validator: (rule, value, callback) => {
this.validateRange(rule, value, callback, 'inputNormalStart', 'inputNormalEnd');
}, trigger: 'blur' }
],
inputStandardStart: [
{ validator: (rule, value, callback) => {
this.validateRange(rule, value, callback, 'inputStandardStart', 'inputStandardEnd');
}, trigger: 'blur' }
],
inputStandardEnd: [
{ validator: (rule, value, callback) => {
this.validateRange(rule, value, callback, 'inputStandardStart', 'inputStandardEnd');
}, trigger: 'blur' }
],
periodNormalStart: [
{ validator: (rule, value, callback) => {
this.validateRange(rule, value, callback, 'periodNormalStart', 'periodNormalEnd');
}, trigger: 'blur' }
],
periodNormalEnd: [
{ validator: (rule, value, callback) => {
this.validateRange(rule, value, callback, 'periodNormalStart', 'periodNormalEnd');
}, trigger: 'blur' }
]
}
/**
* @Des {驗(yàn)證數(shù)字的有效范圍}
*/
validateRange(rule, value, callback, beforeKey, afterKey) {
if (value) {
if (this.indexConfigDialogForm[afterKey]) {
if (parseFloat(this.indexConfigDialogForm[beforeKey]) > parseFloat(this.indexConfigDialogForm[afterKey])) {
callback(new Error('輸入范圍有誤藻雪,請(qǐng)檢查'));
} else {
callback()
}
} else {
callback()
}
} else {
callback();
}
}
-
ElementUI表單校驗(yàn)prop的嵌套寫法
頁(yè)面中的表單經(jīng)常會(huì)有校驗(yàn)?zāi)承┳侄蔚男枰穹荩R?guī)的寫法是prop和表單的字段名一致即可,但是表單的數(shù)據(jù)格式可能會(huì)很復(fù)雜良瞧,如果 某個(gè)字段有多級(jí)嵌套,那我們?cè)撊绾握_的寫prop呢训唱,下面的三種情況中褥蚯,我分別介紹如何設(shè)置prop屬性才能正確的校驗(yàn)name字段。
-
常規(guī)寫法
這種情況我們只需要設(shè)置prop為name即可
<el-form-item prop="name"> <el-input v-model="form.name"></el-input> </el-form-item> form: { name: '', sex: '', age: '' }
-
對(duì)象嵌套寫法
如果校驗(yàn)的字段是二級(jí)屬性况增,那么prop從一級(jí)屬性u(píng)ser_info開始
<el-form-item prop="user_info.name"> <el-input v-model="form.user_info.name"></el-input> </el-form-item> form: { user_info: { name: '', sex: '', age: '' } }
-
數(shù)組嵌套寫法
如果校驗(yàn)的字段是數(shù)據(jù)里面的某一項(xiàng)的某個(gè)字段赞庶,我們需要從user_info開始,然后跟上數(shù)組的索引,最后再加上需要校驗(yàn)的字段
<el-form-item v-for="(info, index) in form.user_info" :prop="'user_info.' + index + '.name'" > <el-input v-model="info.name"></el-input> </el-form-item> form: { user_info: [ { name: '', sex: '', age: '' }, { name: '', sex: '', age: '' } ] }
總結(jié):el-form-item上的屬性prop字段歧强,必須是其父級(jí)組件el-form中綁定model字段中的一個(gè)直接子屬性澜薄。比如某個(gè)字段我們可以通過this.form.user_info[0].name獲取到,那么我們就需要設(shè)置prop為user_info[0].name摊册,這樣就可以添加校驗(yàn)規(guī)則了肤京,其他嵌套情況也一樣。
-
-
添加驗(yàn)證方式
- 方式一
<template v-if="dialogFormData.experimentList && dialogFormData.saveAndSubmitBtnFlag"> <div v-for="(items, outIndex) in dialogFormData.experimentList" :key="items.experimentName"> <el-form-item label="名稱:">{{ items.experimentName }}</el-form-item> <el-form-item v-for="(item, innerIndex) in items.experimentItemList" :key="item.id" :label="item.experimentItemName + ':'" :prop="'experimentList.' + outIndex + '.experimentItemList.' + innerIndex + '.experimentItemValue'" :rules="[ { required: true, message: '不能為空', trigger: 'blur' }, { type: item.dataType === 'NUMERICAL_TYPE' ? 'number' : 'string', message: item.dataType === 'NUMERICAL_TYPE' ? '請(qǐng)輸入具體數(shù)值' : ''}, { validator: (rule, value, callback) => { validateInputLen(rule, value, callback, item.dataType); }, trigger: 'blur' }, ]" > <!-- <el-input v-model="item.experimentItemValue" autocomplete="off"> <template slot="append">{{ item.unit }}</template> </el-input> --> <el-input v-if="item.dataType !== 'NUMERICAL_TYPE'" v-model="item.experimentItemValue" autocomplete="off"> <template slot="append">{{ item.unit }}</template> </el-input> <el-input v-else v-model.number="item.experimentItemValue" autocomplete="off"> <template slot="append">{{ item.unit }}</template> </el-input> </el-form-item> </div> </template>