Search code examples
vue.jsvuejs2vue-componentvee-validatevue-directives

Vee-validate - [Vue warn]: Failed to resolve directive: validate


I want to validate text fields, trying below code :

 <input v-validate="result.val=='Required' ? 'required' : ''" v-model="required" :name="f_name" type="text"/>

but getting this error:

app.js:48089 [Vue warn]: Failed to resolve directive: validate

Trying this:

<ValidationProvider name="phone" :rules="required" v-slot="{ errors }">
  <input class="form-control" :name="phone" type="text" v-model="form.phone"/>
  </ValidationProvider>

Solution

  • According to the migration guide this directive is removed in v3.x :

    Fields that had the v-validate directive needs to be wrapped by ValidationProvider component now, and they need to use v-model to properly tag themselves for vee-validate. So this:

    <input type="text" name="field" v-validate="'required'">
    <span>{{ errors.first('field') }}</span>
    

    Will be re-written as this:

    <ValidationProvider name="field" rules="required" v-slot="{ errors }">
      <input type="text" v-model="value">
      <span>{{ errors[0] }}</span>
    </ValidationProvider>
    

    Your code should be like :

    <ValidationProvider name="f_name" :rules="result.val=='Required' ? 'required' : ''" v-slot="{ errors }">
    <input v-model="required" :name="f_name" type="text"/>
    </ValidationProvider>
    

    You should add this to main.js :

    import { ValidationProvider } from 'vee-validate';
    
    Vue.component('ValidationProvider', ValidationProvider);
    

    If you are not using a bundler and using vee-validate in the browser or from a CDN:

    <script>
      // ...
      Vue.component('validation-provider', VeeValidate.ValidationProvider);
      // ...
    </script>