我的要求是这样的。
这是我的代码。
<template>
<div>
<h1>Add Items</h1>
Product Name :
<input
type="text"
name="product"
v-model="product"
v-validate="'required|alpha_dash'"
>
<span style="color:red;">{{errors.first('product')}}</span>
<br>
Product Price :
<input
type="number"
name="price"
v-model="price"
v-validate="'required|min_value:100|max_value:500'"
>
<span style="color:red;">{{errors.first('product')}}</span>
<br>
<button @click="submit">Save</button>
</div>
</template>
<script>
export default {
data() {
return {
price: "",
product: ""
};
},
methods: {
submit() {
alert("On submit");
}
}
};
</script>
&#13;
现在它只显示第一个错误{{errors.first('product')}}
而不是我想要一次显示所有错误
和
只有触摸输入字段才会显示错误。我想显示所有验证错误,无论你是否触摸字段,我想在你点击提交按钮时显示所有错误。
答案 0 :(得分:3)
您可以使用validateAll
方法:
submit() {
this.$validator.validateAll()
if (!this.errors.any()) {
alert('submit')
}
}
答案 1 :(得分:3)
Sovalina正常工作,但是$ validator.validateAll()在警报后运行,这意味着不会先对其进行验证。我找到了这段代码,它对我来说很好用:
submit() {
this.$validator.validateAll().then((result) => {
if (result) {
alert('Form Submitted!');
return;
}
alert('Correct them errors!');
});
}
答案 2 :(得分:3)
在最新的vee-validate(在我撰写本文时为3.0.5版)中,这一切都已更改。您需要将整个表单包装在一个ValidationObserver
组件中,并带有一个ref(稍后您可以在Submit方法中对其进行访问)-
<ValidationObserver ref="observer" v-slot="{ invalid }" @submit.prevent="submit()">
<ValidationProvider ...
<input... etc
您的Submit方法应如下所示:
async submit () {
const isValid = await this.$refs.observer.validate()
if (isValid) {
// data is valid - post your form data
} else {
alert('Data isn't valid')
}
}
有多种方法可以导入ValidationProvider组件-这是常规的vue东西...这是指向文档的链接:
https://logaretm.github.io/vee-validate/guide/validation-observer.html