vue.js - 如何在 VueJs Element 中应用单个错误消息?
问题描述
我在应用程序中有一个表单(http://element.eleme.io/#/en-US/component/form),我在其中进行服务器端验证。但我没有 glu 如何为特定输入添加错误消息。
解决方案
每个都el-form-item
需要一个 prop 属性才能使前端验证正常工作。他们还需要一个绑定的错误属性。为简单起见,我只是将每个字段名称与字段名称相同,如下所示:
<el-form-item label="Email" prop="email" :error="errors.email">
<el-input v-model="form.email" type="email"></el-input>
</el-form-item>
然后,当提交表单时,我运行我的前端规则验证器(使用 Element 的规则)。之后我使用 axios 发布到服务器(Laravel)。我遍历所有错误,并更新错误对象中的值。每当提交表单时,我都会清除错误(如果您不清除它们,错误将不会出现在连续提交的表单中)。
data() {
let passwordsMatch = (rule, value, callback) => {
if ( value != this.form.password )
return callback(new Error('Passwords do not match'));
return callback();
};
let form = {
first_name: '',
last_name: '',
email: '',
phone: '',
password: '',
password_confirmation: '',
};
// copy blank values, not reference
let errors = {...form};
let blankErrors = {...form};
return {
form,
errors,
blankErrors,
rules: {
first_name: [
{ required: true, message: 'First Name is required', trigger: 'blur' },
],
last_name: [
{ required: true, message: 'Last Name is required', trigger: 'blur' },
],
email: [
{ required: true, message: 'Email is required', trigger: 'blur' },
{ type: 'email', message: 'Must be an email', trigger: 'blur' },
],
phone: [
{ required: true, message: 'Cell Phone is required', trigger: 'blur' },
// TODO: finish phone validation
//{ type: 'number', message: 'Must be a phone number', trigger: 'blur' },
],
password: [
{ required: true, message: 'Password is required', trigger: 'blur' },
],
password_confirmation: [
{ required: true, message: 'Password is required', trigger: 'blur' },
{ validator: passwordsMatch, trigger: 'blur' },
],
},
}
},
methods: {
createAccount() {
this.clearErrors();
let passed = this.runValidator();
if (! passed) return;
axios.post(`/register`, this.form)
.then(response => {
EventBus.$emit('user-form-completed', this.form);
return;
})
.catch(error => {
const errors = error.response.data.errors;
for (let index in errors) {
let error = errors[index][0];
this.errors[index] = error;
}
});
},
clearErrors() {
this.errors = {...this.blankErrors};
},
runValidator() {
let passed = false;
this.$refs.form.validate((valid) => {
if (valid) passed = true;
});
return passed;
},
},
推荐阅读
- c# - 对同一主机上的其他应用程序的异步影响 (IIS)
- javascript - 我无法向鼠标 p5.js 旋转正方形,使其保持在中心
- stripe-payments - Stripe - 使用 3DS 的订阅计划
- json - 在颤动中将JSON数据添加到列表时出错
- r - 如何在动物园对象时间序列中绘制边缘以突出显示一个时期?
- android - 如何下载最新版本的 Android SDK for Visual Studio .NET 2017
- python - 在 Windows 上安装 psycopg2 时出错
- java - Java序列化,为什么保存到数据库时没有序列化异常?
- vb.net - 如何在 Visual Basic 中播放声音两次
- tensorflow - 自定义 keras 层未显示在 model.summary 中