网址检查的ValidationProvider规则

时间:2019-12-19 15:58:22

标签: vue.js vee-validate

在@ vue / cli 4.0.5应用程序中,我需要向ValidationProvider规则中添加附加URL检查。我的代码:

<ValidationProvider
    name="website"
    rules="{ required : true, url: {require_protocol: true} }"
    v-slot="{ errors }"
>

但是出现此控制台错误:

  

不存在这样的验证器'{required'。

使用rules

    rules="required : true, url: {require_protocol: true}"

错误是:

  

不存在这样的“必需”验证器。

哪种格式有效?

    "vee-validate": "^3.1.0",
    "vue": "^2.6.10",

已修改的块:

有规则:

:rules="{ required : true, url: {require_protocol: true} }"

我遇到下一个错误:

vee-validate.esm.js?7bb1:708 Uncaught (in promise) Error: No such validator 'url' exists.

我希望所有方法都必须可以访问,就像在导入部分中一样:

...
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 {localize} from 'vee-validate';

怎么了?

已修改的#2块:

在Vue文件中

   <ValidationProvider
        name="website"
        :rules="{ required : true }"
        v-slot="{ errors }"
    >


...

import { ValidationObserver, ValidationProvider } from 'vee-validate'
import { required, email } from 'vee-validate/dist/rules' // MY PHP STORM shows this line in gray color as nonused elements

我仍然有错误:

vee-validate.esm.js?7bb1:708 Uncaught (in promise) Error: No such validator 'required' exists.

我发现文件/node_modules/vee-validate/dist/rules.js带有行:

var required = {
    validate: validate$o,
    params: params$h,
    computesRequired: computesRequired
};

var testEmpty = function (value) {
    return isEmptyArray(value) || includes([false, null, undefined], value) || !String(value).trim().length;
};
var validate$p = function (value, _a) {
    var target = _a.target, values = _a.values;
    var required;
    if (values && values.length) {
        if (!Array.isArray(values) && typeof values === 'string') {
            values = [values];
        }
        // eslint-disable-next-line
        required = values.some(function (val) { return val == String(target).trim(); });
    }
    else {
        required = !testEmpty(target);
    }
    if (!required) {
        return {
            valid: true,
            required: required
        };
    }
    return {
        valid: !testEmpty(value),
        required: required
    };
};
...

与示例/提供的链接相比,我没有看到错误语法 我在必需的声明之前声明了ValidationObserver,ValidationProvider。 错误在哪里?

谢谢!

1 个答案:

答案 0 :(得分:3)

this example中,他们使用竖线字符(|)分隔字符串规则:

<ValidationProvider rules="required|confirmed:confirm" v-slot="{ errors }">
...

但是,如果您想像现在一样传递一个对象(这可能是最好的选择,因为它比该示例更复杂),则需要绑定rules道具:

<ValidationProvider
  v-bind:rules="{ required : true, ... }"
  ...
>

<!-- Or shorthand binding syntax with : -->
:rules="{ required : true, ... }"

要解释您当前遇到的错误:

  

不存在这样的验证器'{required'。

这是因为,没有绑定rules道具,您传递的是原始字符串而不是对象。因此,当{ required显然不是有效的验证者名称时,它将import { required, email } from 'vee-validate/dist/rules';解释为验证者的名称。

添加

为此GitHub issue

  

现在,VeeValidate要求您自己导入规则。因此,您可以>按规则导入它们

     

import { ValidationProvider, ValidationObserver } from 'vee-validate/dist/vee-validate.full';

     

或者您可以使用以下命令一次导入所有规则:

     
{{1}}