当前位置: 首页 > 知识库问答 >
问题:

vee验证自定义规则出错

谭绍晖
2023-03-14

在@vue/cli 4.1中。1应用程序我使用v-money和vee validate,我发现所需规则不适用于v-money,因为它始终具有“0”值。因此,我在这里编写自定义验证http://vee-validate.logaretm.com/v2/guide/custom-rules.html#using-习惯规则

在测试页面中插入此测试[ple]控制台中出现警告:

 WARNING  Compiled with 2 warnings                                                                                                                                                                           7:45:56 AM

 warning  in ./src/views/Test.vue?vue&type=script&lang=js&

"export 'Validator' was not found in 'vee-validate'

 warning  in ./src/views/Test.vue?vue&type=script&lang=js&

"export 'Validator' was not found in 'vee-validate'


  App running at:
  - Local:   http://localhost:8080/ 
  - Network: unavailable

在浏览器中,我看到错误:

vue-router.esm.js?8c4f:2113 TypeError: Cannot read property 'extend' of undefined
    at eval (Test.vue?f246:87)
    at Module../node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/views/Test.vue?vue&type=script&lang=js& (4.js:11)
    at __webpack_require__ (app.js:790)
    at fn (app.js:151)

我的测试组件:

<template>
    <div class="frontend_item_container">
        <ValidationObserver
                ref="pageObserverForm"
                v-slot="{handleSubmit}"
        >
            <b-form @submit.prevent="handleSubmit(onSubmit)">

                <b-card-header>
                    <h3 class="row_content_left_aligned p-2" v-show="is_page_loaded">
                        <i :class="'info_link '+getHeaderIcon('page')"></i>{{ getHeaderTitle }}
                    </h3>
                    <div v-show="!is_page_loaded">
                        <h3>
                            <b-spinner variant="success" label="Page loading"></b-spinner>&nbsp;Page loading...
                        </h3>
                    </div>

                </b-card-header>

                <b-card-body v-show="is_page_loaded">

                    <b-row class="editor_row">
                        <b-col md="4">
                            <label for="editable_ad_price" class="pt-2 ">
                                Price<span class="required"> * </span>:
                            </label>
                        </b-col>
                        <b-col md="8">
                            price::{{ price}}
                            <ValidationProvider
                                    name="editable_ad_price"
                                    rules="required|truthy"
                                    v-slot="{ errors }"
                            >
                                <money
                                        v-model="price"
                                        v-bind="moneyConfig"
                                        name="editable_ad_price"
                                        id="editable_ad_price"
                                        class="form-control text-right"
                                        placeholder="Enter price"
                                >
                                </money>
                                <p class="validation_error">{{ clearErrorMessage(errors[0]) }}</p>
                            </ValidationProvider>
                        </b-col>
                    </b-row>

                </b-card-body>

                <b-card-footer class="buttons_container" v-show="is_page_loaded">
                    <b-button size="md" @click.prevent="$router.push('/admin/pages')" class="m-3">
                        <i :class="'a_link '+getHeaderIcon('cancel')"></i>Cancel
                    </b-button>
                    <b-button type="submit" size="md" variant="success" class="m-3">
                        <i :class="'action_link '+getHeaderIcon('save')"></i>{{ submit_label }}
                    </b-button>
                </b-card-footer>

            </b-form>
        </ValidationObserver>
    </div>
</template>

<script>
    import appMixin from '@/appMixin';
    import Vue from 'vue'

    import money from 'v-money'
    Vue.use(money, {precision: 4})

    import {settingsLocalizeMessages} from '@/app.settings.js'

    import {ValidationObserver, ValidationProvider, extend} from 'vee-validate'

    import * as rules from 'vee-validate/dist/rules';

    Object.keys(rules).forEach(rule => {
        extend(rule, rules[rule]);
    });


    import { Validator } from 'vee-validate';

    Validator.extend('truthy', {
        getMessage: field => 'The ' + field + ' value is not truthy.',
        validate: value => !! value
    });

    let instance = new Validator({ trueField: 'truthy' });

    instance.extend('falsy', (value) => ! value);

    instance.attach({
        name: 'falseField',
        rules: 'falsy'
    });


    import {localize} from 'vee-validate';
    localize({
        en: settingsLocalizeMessages['en']
    });

    export default {
        data() {

            return {
                apiUrl: process.env.VUE_APP_API_URL,
                price: 12,
                moneyConfig: {
                    decimal: ',',
                    thousands: '.',
                    prefix: '$',
                    suffix: '',
                    precision: 2,
                    masked: false
                },
                is_page_loaded: false,

            }
        }, // data() {

        name: 'testPage',
        mixins: [appMixin],

        components: {
            ValidationObserver, ValidationProvider
        },

        mounted() {
        }, //  mounted() {

        created() {
        }, //  created() {

        beforeDestroy() {
        },

        methods: {
        },  // methods: {

        computed: {
            getHeaderTitle: function () {
                return 'Test'
            },
        }, //computed: {


    }
</script>

为什么会出现错误以及如何修复?

"bootstrap-vue": "^2.3.0",
"v-money": "^0.8.1",
"vee-validate": "^3.2.1",
"vue": "^2.6.11",

谢谢!

共有1个答案

罗翔
2023-03-14

您正在使用vee validate的旧文档。在版本3中,您必须执行以下操作:

import { extend } from 'vee-validate';

还可以查看3。此处有x个文档:https://logaretm.github.io/vee-validate/guide/basics.html#adding-规则

 类似资料:
  • 我想知道你是否可以使用vee validate插件编写自定义日期验证,其中结束日期不能小于开始日期?我到处寻找,我找不到确切的答案。 如果没有办法实现这一点,那么我可以凑合着没有它,但是,现在我已经在我的模板中实现了我的开始日期是: 我的脚本如下所示: 但是没有出现任何验证。我想我在我的脚本中丢失了一些东西,但我不确定如何将日期实现到那里。任何帮助将不胜感激。

  • 我正在使用一个名为verify.js的新插件来验证表单字段,在我开始尝试创建自己的自定义验证规则之前,所有的工作都很顺利。 这里是他们文档的链接,其中解释了如何创建自定义验证:http://verifyjs.com/#custom-rules 更有帮助的是插件作者发布在JSfiddle上的这个示例:http://jsfidle.net/jpillora/r4t84/1/I几乎精确地复制了这里的代码

  • 我正在将Laravel-5.8与Vue一起使用。js。我的问题是如何在Vee Validate库中显示规则的自定义错误消息。“required”规则的自定义消息没有显示,而是显示为:“first_name字段是必需的。”预期的消息是“请输入名字。” 下面的代码在应用程序中。js 这是我的HTML组件代码。 下面是我的JS脚本代码 我遗漏了什么吗?

  • 抱歉,我对VueJS及其框架还是很陌生。 我试图使用vee-valester和自定义规则来检查针对AxiosGET响应的API后端的输入字段的值。本质上,如果您输入一个无效的ID,它会抛出一个错误,直到您正确地获得它(即:将票证分配给一个有效的员工,您必须输入一个有效的员工ID)。 我的模板代码现在看起来像这样: (我正在处理如何做到这一点,因此对实际执行AxiosAPI调用的函数进行了@更改)

  • 本文向大家介绍thinkphp5.0自定义验证规则使用方法,包括了thinkphp5.0自定义验证规则使用方法的使用技巧和注意事项,需要的朋友参考一下 我们在用thinkphp5.0时候,经常要自定义验证规则,这个写法与tp以前的版本有所区别,小编今天带来大家一起来学习一下5.0下验证规则的使用方法。 在thinkphp5中定义$rule(验证规则)有两种方式 方式一: 方式二: 如果方式一自定义

  • 授人以鱼,不如授人以渔。Dism++的能力是有限的,无法覆盖的所有用户的需求。因此给程序添加了自定义规则功能,方便高级用户打造自己的专属工具。 创建一个空白的自定义规则文件 我们只需要在Config目录新建一个 Custom*.xml 这样形式的xml文件即可(*表示任何字符串,比如Custom1.xml或者Custom我爱我的家.xml,另外文件以UTF8或者Unicode编码保存)。初始文件内