2017-03-07 28 views
0

我正在开发vue.js 2.0项目。我正在使用Vee-Validate插件。我有一个表单,当它提交时,它会对我的API进行ajax调用。 api调用成功返回后,我试图清除我的vee验证,以便我可以邀请具有相同表单的另一个用户,但它根本不起作用。Vue.js 2.0 Vee验证插件不会在ajax调用后清除错误

我试过方法this.errors.clear()在建议他们documentation

我也想,也许事情发生得太快了,所以我增加了一组超时功能的一对夫妇秒,但它仍然不清除错误。

这里是所有相关的代码我的VUE文件:

<template> 
    <div v-if="user.first_time_login == 0 && user.stripe_check == 1"> 
    <div class="viv-modal-overlay"> 
     <div class="container"> 
     <div class="viv-modal green"> 
      <span class="modal-title" id="setup-team-top">Now let’s set up your team.</span> 
      <p>Your plan allows up to {{this.user.company.max_users}} users. Would you like to shoot out some team invites before we send you to the dashboard?</p> 
      <div class="invited-users" v-bind:class="{ show: show_invites }" v-if="show_invites"> 
      <p>You can invite up to 4 more team members. <a href="#">Upgrade to add more.</a></p> 
      <ul> 
       <li v-for="invite in invites"> 
       <img src="/img/icons/checkmark.svg" width="20" height="20" alt="success"> 
       You invited {{invite.email}}. 
       <span class="clearfix"></span> 
       </li> 
      </ul> 
      <div class="team-done-adding"> 
       <a href="#">I'm done adding team members.</a> 
      </div> 
      </div> 
      <div class="modal-form"> 
      <form id="setup-stripe-form"> 
       <div class="row"> 
       <div class="col-md-12"> 
        <div class="form-group"> 
        <label>Team Member's Email<span>*</span></label> 
        <input type="text" name="email" v-model="newUser.email" v-validate data-vv-rules="required" class="form-control" :placeholder="'[email protected]'+user.company.company_name.replace(/[^A-Z0-9]+/ig, '').toLowerCase()+'.com'"> 
        <span v-show="errors.has('email')" class="error">{{ errors.first('email') }}</span> 
        </div> 
        <div class="form-group"> 
        <label>Access to Leads and Contacts<span>*</span></label> 
        <select name="access_leads" v-model="newUser.access_leads" v-validate data-vv-rules="required" class="form-control"> 
         <option value="1">they can see leads and contacts they created</option> 
         <option value="2">they can see all leads and contacts</option> 
         <option value="0">no access to leads and contacts</option> 
        </select> 
        <span v-show="errors.has('access_leads')" class="error">{{ errors.first('access_leads') }}</span> 
        </div> 
        <div class="form-group"> 
        <label>Access to Proposals<span>*</span></label> 
        <select name="access_proposals" v-model="newUser.access_proposals" v-validate data-vv-rules="required" class="form-control"> 
         <option value="1">they can see proposals they created</option> 
         <option value="2">they can see all proposals</option> 
         <option value="0">no access to proposals</option> 
        </select> 
        <span v-show="errors.has('access_proposals')" class="error">{{ errors.first('access_proposals') }}</span> 
        </div> 
        <div class="form-group"> 
        <label>Access to Invoices<span>*</span></label> 
        <select name="access_invoices" v-model="newUser.access_invoices" v-validate data-vv-rules="required" class="form-control"> 
         <option value="1">they can see invoices they created</option> 
         <option value="2">they can see all invoices</option> 
         <option value="0">no access to invoices</option> 
        </select> 
        <span v-show="errors.has('access_invoices')" class="error">{{ errors.first('access_invoices') }}</span> 
        </div> 
        <div class="form-group"> 
        <label>Access to Projects<span>*</span></label> 
        <select name="access_projects" v-model="newUser.access_projects" v-validate data-vv-rules="required" class="form-control"> 
         <option value="1">they can see projects they created</option> 
         <option value="2">they can see all projects</option> 
         <option value="0">no access to projects</option> 
        </select> 
        <span v-show="errors.has('access_projects')" class="error">{{ errors.first('access_projects') }}</span> 
        </div> 
       </div> 
       <div class="col-md-12 text-center"> 
        <div class="modal-btn-pad"> 
        <button type="submit" v-bind:class="{ disabled: adding_team_member }" class="btn btn-lg btn-green" @click="submitInviteForm"> 
         <span class="sending-invite" v-if="adding_team_member">Sending Invite <img src="/img/preloader.svg" width="20" height="20"></span> 
         <span v-else>Continue</span> 
        </button><br> 
        <a class="light-link" href="#" @click="skipInviteForm">Skip this for now.</a> 
        </div> 
       </div> 
       </div> 
      </form> 
      </div> 
     </div> 
     </div> 
    </div> 
    </div> 
</template> 

<script> 
import { mapState } from 'vuex' 
export default { 
    data() { 
    return { 
     newUser: { 
     email: '', 
     access_leads: 1, 
     access_proposals: 1, 
     access_invoices: 1, 
     access_projects: 1 
     }, 
     users_invited: 0, 
     invites: [], 
     show_invites: false, 
     adding_team_member: false 
    } 
    }, 
    computed: mapState({ 
    appLoading: state => state.appLoading, 
    user: state => state.user 
    }), 
    methods: { 
    submitInviteForm: function(e) { 

     e.preventDefault() 

     this.$validator.validateAll() 

     if (!this.errors.any()) { 
     //There are no errors, move forward... 

     //Add the team member to the database... 

     //Grab the authorized user 
     const authUser = JSON.parse(window.localStorage.getItem('authUser')) 

     //Create the payload... 
     var newTeamMember = this.newUser 

     //Were adding a team member now so show the loader! 
     this.adding_team_member = true 

     //Create the new company and add the owner... 
     this.$http.post('/api/team', 
     { 
      newTeamMember: JSON.stringify(newTeamMember) 
     }, 
     { 
      headers: { 
      Authorization: 'Bearer ' + authUser.access_token 
      } 
     }).then((response) => { 
      if(response.status === 200) { 
      //Assign the user to a variable 
      var invitedUser = response.body 

      //Add the user to the list of invited users 
      this.invites.push({email: invitedUser.email }) 

      //Show the invite list... 
      this.show_invites = true 

      //Jump to top 
      location.hash = '#setup-team-top' 

      //reset the new user 
      this.newUser.email = '' 
      this.newUser.access_leads = 1 
      this.newUser.access_proposals = 1 
      this.newUser.access_invoices = 1 
      this.newUser.access_projects = 1 

      //Were done adding a team member so hide the loader! 
      this.adding_team_member = false 

      //Clear the validation errors 
      this.errors.clear() 

      } 
     }).catch(function(error){ 
      console.log(error); 
     }) 

     } 
    }, 
    skipInviteForm: function(e) { 
     e.preventDefault() 
     alert('skip invite!') 
    } 
    } 
} 
</script> 

回答

-1

尝试看看这个fiddle这是从这个issue提取。 基本上,您必须在重置表单的输入字段后调用this.$validator.clean();