【问题标题】:VeeValidate fastExit with multple error not workingVee Validate fastExit 有多个错误不起作用
【发布时间】:2020-08-18 16:49:03
【问题描述】:

我正在使用 Veevalidate 版本 2。文档已损坏或无用。我试图在现场使用多个错误,但它只显示一个。我错过了什么?这是我的代码:

Vue.use(VeeValidate, {
    fastExit: false
});

Validator.extend("number", {
    getMessage: (field) =>
        "Error 1",
    validate: (value) => {
        if (/^[^-][0-9]+|[.][0-9]+/) {
            return true;
        } else {
            return false;
        }
    },
});
Validator.extend("number2", {
    getMessage: (field) =>
        "The field is required",
    validate: (value) => {
        if (value == '') {
            return false;
        } else {
            return true;
        }
    },
});

    <input
      class="ff"
      v-validate="'number|number2|required'"
      v-model="application.number"
    />
  </div>
  <span v-show="errors.has('number')" class="error">
    {{
    errors.first("number")
    }}
  </span>
  <span v-show="errors.has('number2')" class="error">
    {{
    errors.first("number2")
    }}
  </span>

【问题讨论】:

  • 你确定number2有错误吗?
  • @AdamOrlov 是 Validator.extend("number2"
  • @Nofel 显示哪个错误?总是numbernumber2 还是随机的?
  • 是的,但你说只有一个错误显示。 number2 上有 v-show。所以我的问题是你确定应该显示number2 错误吗? Veevalidates 错误包中的number2 是否有error
  • @UtsavPatel 它一直选择number 的旧错误消息,就像它忽略number2 并保留number 错误消息的旧副本,即使我将其注释掉

标签: vue.js vee-validate


【解决方案1】:

TLDR:codesandbox example

根据文档,您可以使用errors.collect 显示多个错误

<ul>
  <li v-for="error in errors.collect('fieldName')">{{ error }}</li>
</ul>

在您的示例中 - number1 的验证不正确,您需要类似 if (value.match(&lt;regex&gt;)) 的内容

main.js

import Vue from "vue";
import VeeValidate, { Validator } from "vee-validate";
import App from "./App.vue";

Vue.use(VeeValidate, {
  fastExit: false
});

Validator.extend("shouldBeNumber", {
  getMessage: field => "Should be a number",
  validate: value => {
    if (value.match(/^[a-z]+/)) {
      return false;
    } else if (value.match(/^[0-9]+/)) {
      return true;
    }
  }
});

Validator.extend("shouldBeLongerThan3", {
  getMessage: field => "Field should be longer than 3 numbers",
  validate: value => {
    if (value.length < 3) {
      return false;
    } else {
      return true;
    }
  }
});

Validator.extend("shouldNotIncludeSymbols", {
  getMessage: field => "Should not include symbols",
  validate: value => {
    if (value.match(/[^\w\s]+/)) {
      return false;
    } else {
      return true;
    }
  }
});

Vue.config.productionTip = false;

new Vue({
  render: h => h(App)
}).$mount("#app");

App.vue

<template>
  <div>
    <input
      class="ff"
      v-validate="'shouldBeNumber|shouldBeLongerThan3|shouldNotIncludeSymbols|required'"
      name="number"
      v-model="number"
    >
    <span v-bind:key="index" v-for="(error, index) in errors.collect('number')">{{ error }}</span>
  </div>
</template>

<script>
export default {
  name: "App",
  data() {
    return {
      number: null
    };
  }
};
</script>

<style lang="scss" scoped>
.fieldset {
  margin-bottom: 10px;
  border: 0;
}
</style>

【讨论】:

  • 我在这里看到的唯一问题是错误消息彼此相邻。而我希望错误根据不满足的条件而改变。现在是Error 1The field is requiredThe number field is required
  • 由于 fastExit 为 false,这将显示所有未通过的验证 - 在您提供的示例中,requirednumber2 基本相同
  • 我会把例子改得更真实
  • 所以我要删除fastExit?我也看到你通过errors.collect('number') 我相信和name attru 需要与数据属性相同而不相同?
  • 上面的例子是我想做的精简版。有一个小问题,即使在我为某个字段注释掉我的extend 之后,它仍然显示这让我认​​为错误是否是一个闭包函数?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 2018-11-30
  • 1970-01-01
  • 2023-01-03
  • 2018-08-19
  • 2021-05-06
  • 1970-01-01
相关资源
最近更新 更多