VeeValidate 不验证来自动态表单的输入
VeeValidate doesn't validate inputs from a dynamic form
我正在尝试在 vuejs 中使用 veeValidate 生成带有验证的动态表单,我尝试这样做的方式是在组件数据中创建一个对象数组,例如:
data(){
return{
inputs: [
{
id: 1,
label: "first name",
type: "text",
placeholder: "",
model: "",
rules: "required"
},
{
id: 2,
label: "last name",
type: "text",
placeholder: "",
model: "",
rules: "required"
} ]
}
}
对于html:
<ValidationObserver v-slot="{ handleSubmit }">
<b-form @submit.prevent="handleSubmit(onSubmit)" class="p-5">
<div v-for="inp in inputs" v-bind:item="inp" :key="inp.id">
<ValidationProvider name="Value" :rules="inp.rules" v-slot="validationContext">
<b-form-group
:id="'input-group-'+inp.id"
:label="inp.label"
:label-for="'input-'+inp.id"
label-cols="4"
label-cols-lg="2"
>
<div v-if="inp.type != 'select'">
<b-form-input
:type="inp.type"
:placeholder="inp.placeholder"
v-model="inp.model"
:id="'input-'+inp.id"
:name="'input-'+inp.id"
:state="getValidationState(validationContext)"
aria-describedby="input-1-live-feedback"
></b-form-input>
<b-form-invalid-feedback
:id="'input-'+inp.id+'-live-feedback'"
>{{ validationContext.errors[0] }}</b-form-invalid-feedback>
</div>
</b-form-group>
</ValidationProvider>
</div>
<button type="submit">Submit</button>
</b-form>
<div>
Look at the output
{{show}}
</div>
</ValidationObserver>
当尝试在 html 上动态生成输入时,这工作正常。但是当我尝试向该动态表单添加表单验证时,问题就来了。
我 expect/want 要做的事情:假设表单有一个提交按钮,如果输入有 'required' 验证,我期望发生的事情是,如果我没有先输入任何内容就按下按钮,所有输入都应该显示一个警告说 "this input is required" 或类似的东西。
问题:真正发生的是,当您在没有输入任何内容的情况下按下提交按钮时,只有最后一个输入显示警告消息。
这是我正在谈论的示例的 codeSandbox link:
https://codesandbox.io/s/codesandbox-733yf?fontsize=14&hidenavigation=1&theme=dark&file=/src/Demo.vue
当您在 v-for
中工作时,最好(而且显然是必要的)用 vid
标识您的 ValidationProvider
,如下所示:
<ValidationProvider :vid="'vp'+inp.id" name="Value" :rules="inp.rules" v-slot="validationContext">
当我将它添加到您的示例中时,我能够看到您所有的错误消息。
我正在尝试在 vuejs 中使用 veeValidate 生成带有验证的动态表单,我尝试这样做的方式是在组件数据中创建一个对象数组,例如:
data(){
return{
inputs: [
{
id: 1,
label: "first name",
type: "text",
placeholder: "",
model: "",
rules: "required"
},
{
id: 2,
label: "last name",
type: "text",
placeholder: "",
model: "",
rules: "required"
} ]
}
}
对于html:
<ValidationObserver v-slot="{ handleSubmit }">
<b-form @submit.prevent="handleSubmit(onSubmit)" class="p-5">
<div v-for="inp in inputs" v-bind:item="inp" :key="inp.id">
<ValidationProvider name="Value" :rules="inp.rules" v-slot="validationContext">
<b-form-group
:id="'input-group-'+inp.id"
:label="inp.label"
:label-for="'input-'+inp.id"
label-cols="4"
label-cols-lg="2"
>
<div v-if="inp.type != 'select'">
<b-form-input
:type="inp.type"
:placeholder="inp.placeholder"
v-model="inp.model"
:id="'input-'+inp.id"
:name="'input-'+inp.id"
:state="getValidationState(validationContext)"
aria-describedby="input-1-live-feedback"
></b-form-input>
<b-form-invalid-feedback
:id="'input-'+inp.id+'-live-feedback'"
>{{ validationContext.errors[0] }}</b-form-invalid-feedback>
</div>
</b-form-group>
</ValidationProvider>
</div>
<button type="submit">Submit</button>
</b-form>
<div>
Look at the output
{{show}}
</div>
</ValidationObserver>
当尝试在 html 上动态生成输入时,这工作正常。但是当我尝试向该动态表单添加表单验证时,问题就来了。 我 expect/want 要做的事情:假设表单有一个提交按钮,如果输入有 'required' 验证,我期望发生的事情是,如果我没有先输入任何内容就按下按钮,所有输入都应该显示一个警告说 "this input is required" 或类似的东西。
问题:真正发生的是,当您在没有输入任何内容的情况下按下提交按钮时,只有最后一个输入显示警告消息。
这是我正在谈论的示例的 codeSandbox link: https://codesandbox.io/s/codesandbox-733yf?fontsize=14&hidenavigation=1&theme=dark&file=/src/Demo.vue
当您在 v-for
中工作时,最好(而且显然是必要的)用 vid
标识您的 ValidationProvider
,如下所示:
<ValidationProvider :vid="'vp'+inp.id" name="Value" :rules="inp.rules" v-slot="validationContext">
当我将它添加到您的示例中时,我能够看到您所有的错误消息。