初始代码:
// html部分:
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-row>
<a-col :span="24">
<a-form-model-item label="名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="columnName">
<a-input v-model="model.columnName" placeholder="请输入名称"></a-input>
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
// script部分: data
data() {
return {
validatorRules: {
columnName: [
{required: true, message: '请输入名称',validator: this.validateIdentity, trigger: 'change',},
],
},
}
}
// methods
methods: {
// 验证唯一
// rule:采用的规则,value:输入的值,callback:回调函数
validateIdentity(rule, value, callback) {
if (value) {
// 发送请求 验证输入的值是否在数据库中重复
getAction(this.url.list, {value: value}).then((res) => {
if (res.result.records.length) {
callback('名称重复')
} else {
callback()
}
})
} else {
callback('请输入名称')
}
},
}
出现的效果:不管如何都只出“请输入名称”的提示信息,明明控制台callback的信息是“名称重复”
修改:
//验证唯一
validateIdentity(rule, value, callback) {
if (value) {
// callback()
getAction(this.url.list, {value: value}).then((res) => {
if (res.result.records.length) {
this.validatorRules.columnName[0].message='名称重复'
callback('名称重复')
} else {
callback()
}
})
} else {
this.validatorRules.columnName[0].message='请输入名称'
callback('请输入名称')
}
},
出现的效果:应该出现的提示信息总是慢一步(应该是控制台的显示信息)
最终!终于可以了,以下script部分代码:
data() {
return {
validatorRules: {
columnName: [
{required: true, message: '请输入纵队名称', trigger: 'change',},
{validator: this.validateIdentity, trigger: 'change'},
],
},
}
}
methods: {
validateIdentity(rule, value, callback) {
if (value) {
getAction(this.url.list, {value: value}).then((res) => {
if (res.result.records.length) {
callback(new Error('名称重复'))
} else {
callback()
}
} else {
callback('请输入名称')
}
},
}
显示效果: