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

For more info please follow this issue link on github

很简单的一个。虽然不好,但是可以。

<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')