【发布时间】:2019-11-10 12:12:20
【问题描述】:
我正在与 Vee Validate 3.0 作斗争,并开始怀疑是否值得继续使用。我要做的就是为特定页面上的特定字段创建自定义消息。
我已尝试使用以下代码更改正则表达式消息,但无法正常工作。
我正在使用 Vee Validate 3.0 和 Vue,因此没有太多在线资源可以提供帮助。版本 2 的语法似乎要简单得多!
<ValidationObserver ref="observer" v-slot="{ invalid }" tag="form" @submit.prevent="submit()">
<ValidationProvider :rules="{ regex: /^(0[1-9]|1[0-2])\/\d{4}$/ }" name="exp_date" v-slot="{ errors }">
<input name="exp_date" v-model="payment.expdate" placeholder="Expiry MM/YYYY" class="form-control"/>
<span class="warning">{{ errors[0] }}</span>
</ValidationProvider>
</ValidationObserver>
<script>
import { ValidationProvider, ValidationObserver } from 'vee-validate'
export default {
components: {
ValidationProvider,
ValidationObserver
},
data: function () {
return {
customMessages: {
en: {
fields: {
'exp_date': {
regex: 'The date format is MM/YYYY'
}
}
}
}
}
}
}
</script>
更新
我有这个问题,但我不确定我的设置是否正确。
在我的 main.js 中,我正在像这样导入 vee-validate.js
import './vee-validate'
在 vee-validate.js 中,我正在像这样设置在应用程序级别进行验证所需的一切
import { extend, configure, localize } from 'vee-validate'
import { required, max, max_value, email, regex, is, is_not } from 'vee-validate/dist/rules'
import en from 'vee-validate/dist/locale/en.json'
// Install rules
extend('required', required)
extend('max', max)
extend('max_value', max_value)
extend('email', email)
extend('regex', regex)
extend('is', is)
extend('is_not', is_not)
// Override English
localize({
en: {
messages: en.messages,
fields: {
exp_date: {
regex: '{_field_} is the wrong format. MM/YYYY'
}
}
}
})
现在,在这里设置自定义消息对我有用,但我不明白的是,如果我在 2 个单独的屏幕上有相同的字段,我将如何在每个屏幕上获得不同的消息?
更新 2
我认为没有办法为每页设置一条消息 - 我认为解决此问题的方法是确保每个页面都有唯一的字段名称。
【问题讨论】:
-
您能否描述一下您的示例此时发生了什么?您收到错误还是没有验证?
-
@Merc,验证确实触发了,但我仍然看到默认消息而不是我的自定义消息
-
嗯,我将 vee-validate 与自定义消息和自定义验证器一起使用,但我认为它与 vee-validate 2 一起使用。因此,使用 3 时可能会发生一些变化。我会尝试看看新版本,但与此同时:我像这样使用它
import validationMessagesEn from 'vee-validate/dist/locale/en'然后我会添加像validationMessagesEn.messages.atLeastOne = 'At least one interest has to be selected.'这样的自定义消息,稍后我将在自定义验证器中使用它们......无论如何我会试着看看它 -
好的,我明白了。当然,如果您将消息设置为一次验证,它将在您的整个应用程序中使用。我认为,正如您自己所说,没有办法改变页面本身的信息。也许您可以根据路线更改消息? (您是否有权访问代码中定义消息的某处的路由?)
-
除此之外:你如何使用 vee-validate。在组件级别? (在这里他们在全球范围内注册:logaretm.github.io/vee-validate/guide/getting-started.html#es6)。但也许您不必在全球范围内注册它,而只需在您的两个页面/组件中使用,并使用特定消息扩展每个页面上的消息?那行得通吗?..对不起,除了我必须在 vue 应用程序中安装 vee-validate 并测试自己...
标签: vee-validate