Vee Validate 仅验证最后一项

Har*_*nFM 4 vue.js vee-validate

我继承了一个 Vue 站点,该站点的表单在使用 Vee Validate 2.x 时遇到严重的输入延迟。

我迁移到 3.2.4(vue 2.6.10)并遵循迁移指南,但只看到验证检查我的最终输入。

这是代码的修改版本:

<ValidationObserver ref="form">
    <form @submit.prevent="submit">
         <div v-for="formField in form.fields">
              <ValidationProvider name="formField.label" rules="required" v-if="formField.type != 'select'" v-slot="v">
                   <input 
                      :type="formField.type"
                      :placeholder="formField.placeholder"
                      v-model="formField.value"
                   >
                   <span class="text _warning" >{{ v.errors[0] }}</span>
               </ValidationProvider>

               <ValidationProvider name="formField.label" rules="required" v-if="formField.type == 'select'" v-slot="v">
                    <select v-model="formField.value" class="content_input input -select -arrow">
                        <option :value="null" disabled="disabled" selected="selected">Select {{formField.label}}</option>
                        <option v-bind:value="option.value" v-for="option in formField.options" :value="option.value" >{{option.label}}</option>
                    </select>
                    <span class="text _warning" >{{ v.errors[0] }}</span>
               </ValidationProvider>
         </div>
         <button class="button input" type="submit"> 
             {{form.data.submitText}}
         </button>
      </div>
   </form>
</ValidationObserver>

import { extend } from 'vee-validate';
import { required, email } from 'vee-validate/dist/rules';

extend('email', email);

extend('required', {
   ...required,
  message: 'This field is required'
});

export default {
...
    methods: {
        submit() {
            this.$refs.form.validate().then(success => {
                if(!success) {
                    return;
                }
                ...
            });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ryl*_*ley 6

一个非常小的错误 -需要为组件提供唯一的名称,并且您已经设置了将其设置为字符串“formField.label”的ValidationProvider属性。name="formField.label"你想做的就是将其设置为:name="formField.label"(注意额外的冒号)。一旦你这样做了,它就会起作用。

  • 请注意,如果您不想覆盖“name”(例如,如果您使用“name”字段在错误消息中显示),则可以使用“vid”而不是“name”(来源:https:// logaretm.github.io/vee-validate/advanced/cross-field-validation.html#targeting-other-fields) (3认同)