vee-validate 中的自定义验证消息
custom validation message in vee-validate
我正在使用 Laravel - 5.8 和 Vue.js。我的问题是关于如何为 Vee-Validate 库中的规则显示自定义错误消息。我的“必需”规则的自定义消息没有显示,而是显示:“first_name 字段是必需的。”预期的消息是“请输入名字。”
以下代码在app.js
import { ValidationProvider } from 'vee-validate/dist/vee-validate.full';
这是我的HTML组件代码。
<template>
<div>
<form role="form">
<ValidationProvider name="first_name" :rules="required">
<div slot-scope="{ errors }">
<input v-model="profileForm.first_name" class="form-control">
<p>{{ errors[0] }}</p>
</div>
</ValidationProvider>
<button type="button" @click="validateBeforeSubmit()">Update Profile</button>
</form>
</div>
</template>
下面是我的JS脚本代码
<script>
import { localize } from 'vee-validate/dist/vee-validate.full';
import en from "vee-validate/dist/locale/en.json";
export default {
data() {
return {
profileForm: {
first_name: ''
},
customMessages: {
en: {
custom: {
'first_name': {
required: 'Please enter first name'
}
}
}
},
}
},
created() {
localize("en", this.customMessages);
},
methods: {
validateBeforeSubmit() {
this.$validator.validateAll();
}
}
}
</script>
我错过了什么吗?
我认为您需要将 this.customMessages.en
传递给 localize()
或传递的对象具有顶级 属性 en
。传递的字典应该 only contain your custom messages.
custom
关键字已在版本 3 中删除。现在用 fields
代替。 Also this info was missing in docs
很简单的一个。虽然不好,但是可以。
<input name="yourFieldName" type="text" class="form-control" v-model="yourFieldName" v-validate="'alpha_spaces'">
<span class="small text-danger">{{ errors.first('yourFieldName')?'Your custome message':'' }}</span>
感谢@pankaj 的正确答案。对于那些懒得点击链接的人,文档指出了以下解决方案:
import { localize } from 'vee-validate';
localize({
en: {
messages: {
// generic rule messages...
},
fields: {
password: {
required: 'Password cannot be empty!',
max: 'Are you really going to remember that?',
min: 'Too few, you want to get doxed?'
}
}
}
});
一种通用的方法是使用 extend()
:
,而不像 localize
那样将其附加到特定语言
import { extend } from 'vee-validate';
import { required } from 'vee-validate/dist/rules';
extend('required', {
...required,
message: 'Please enter first name',
});
这将传播并包括规则的所有默认属性,同时仍然允许您添加自己的自定义消息。
i18n 示例:
import { extend } from 'vee-validate';
import { required } from 'vee-validate/dist/rules';
import i18n from 'localization';
extend('required', {
...required,
message: i18n.t('LOCALIZATION_PATH'),
});
可以通过 'extend' 添加自定义消息,如 @ zcoop98 所示。需要注意的是,属性 '这样使用会被翻译成message: () => i18n.t ('LOCALIZATION_PATH')
我正在使用 Laravel - 5.8 和 Vue.js。我的问题是关于如何为 Vee-Validate 库中的规则显示自定义错误消息。我的“必需”规则的自定义消息没有显示,而是显示:“first_name 字段是必需的。”预期的消息是“请输入名字。”
以下代码在app.js
import { ValidationProvider } from 'vee-validate/dist/vee-validate.full';
这是我的HTML组件代码。
<template>
<div>
<form role="form">
<ValidationProvider name="first_name" :rules="required">
<div slot-scope="{ errors }">
<input v-model="profileForm.first_name" class="form-control">
<p>{{ errors[0] }}</p>
</div>
</ValidationProvider>
<button type="button" @click="validateBeforeSubmit()">Update Profile</button>
</form>
</div>
</template>
下面是我的JS脚本代码
<script>
import { localize } from 'vee-validate/dist/vee-validate.full';
import en from "vee-validate/dist/locale/en.json";
export default {
data() {
return {
profileForm: {
first_name: ''
},
customMessages: {
en: {
custom: {
'first_name': {
required: 'Please enter first name'
}
}
}
},
}
},
created() {
localize("en", this.customMessages);
},
methods: {
validateBeforeSubmit() {
this.$validator.validateAll();
}
}
}
</script>
我错过了什么吗?
我认为您需要将 this.customMessages.en
传递给 localize()
或传递的对象具有顶级 属性 en
。传递的字典应该 only contain your custom messages.
custom
关键字已在版本 3 中删除。现在用 fields
代替。 Also this info was missing in docs
很简单的一个。虽然不好,但是可以。
<input name="yourFieldName" type="text" class="form-control" v-model="yourFieldName" v-validate="'alpha_spaces'">
<span class="small text-danger">{{ errors.first('yourFieldName')?'Your custome message':'' }}</span>
感谢@pankaj 的正确答案。对于那些懒得点击链接的人,文档指出了以下解决方案:
import { localize } from 'vee-validate';
localize({
en: {
messages: {
// generic rule messages...
},
fields: {
password: {
required: 'Password cannot be empty!',
max: 'Are you really going to remember that?',
min: 'Too few, you want to get doxed?'
}
}
}
});
一种通用的方法是使用 extend()
:
localize
那样将其附加到特定语言
import { extend } from 'vee-validate';
import { required } from 'vee-validate/dist/rules';
extend('required', {
...required,
message: 'Please enter first name',
});
这将传播并包括规则的所有默认属性,同时仍然允许您添加自己的自定义消息。
i18n 示例:
import { extend } from 'vee-validate';
import { required } from 'vee-validate/dist/rules';
import i18n from 'localization';
extend('required', {
...required,
message: i18n.t('LOCALIZATION_PATH'),
});
可以通过 'extend' 添加自定义消息,如 @ zcoop98 所示。需要注意的是,属性 '这样使用会被翻译成message: () => i18n.t ('LOCALIZATION_PATH')