最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Vee-Validate validateAll() with scope - Stack Overflow

programmeradmin1浏览0评论

I have a scenario where I have sectioned out (scoped) a form so that I can validate small chunks at a time using the following function.

validateScope (scope) {
  return this.$validator.validateAll(scope);
}

I want to do one final validation of the entire form before I submit it to the server; however, validateAll() doesn't seem to pick up inputs that have been added to a scope. I've also tried just validating each scope and then submit the form if they are ALL valid, but I am not sure how to do that since everything is asynchronous.

validateAll () {
   let valid = true;

   // Not sure how to build this function since validateScope is asynchronous
   _.each(this.names, (name, index) => {
     if (this.validateScope(`name-${index}`)) {
       valid = false;
     }
   });

   return valid; // Always returns true even though the _.each should set it to false
}

I have a scenario where I have sectioned out (scoped) a form so that I can validate small chunks at a time using the following function.

validateScope (scope) {
  return this.$validator.validateAll(scope);
}

I want to do one final validation of the entire form before I submit it to the server; however, validateAll() doesn't seem to pick up inputs that have been added to a scope. I've also tried just validating each scope and then submit the form if they are ALL valid, but I am not sure how to do that since everything is asynchronous.

validateAll () {
   let valid = true;

   // Not sure how to build this function since validateScope is asynchronous
   _.each(this.names, (name, index) => {
     if (this.validateScope(`name-${index}`)) {
       valid = false;
     }
   });

   return valid; // Always returns true even though the _.each should set it to false
}
Share Improve this question edited Nov 16, 2022 at 9:51 Matthias Hryniszak 3,1624 gold badges39 silver badges51 bronze badges asked Feb 28, 2018 at 15:06 Neve12ende12Neve12ende12 1,1944 gold badges18 silver badges35 bronze badges 5
  • "pick up inputs that have been added to a scope." how are you adding inputs to a scope? – acdcjunior Commented Feb 28, 2018 at 15:18
  • You're going to need to collect all the promises returned from validateScope using something like Promise.all and then evaluate whether one of them returned false or not. If you want to set up a working example, it would be easier to generate an answer. – Bert Commented Feb 28, 2018 at 15:19
  • Where in the code is the asynchronous part? – Bergi Commented Feb 28, 2018 at 15:37
  • @bergi $validator.validateAll is a VeeValidate library function that returns a promise. – Bert Commented Feb 28, 2018 at 15:46
  • @Bert Ah, I thought it was the function posted in the second snippet… – Bergi Commented Feb 28, 2018 at 16:00
Add a ment  | 

1 Answer 1

Reset to default 5

As mentioned in my ment, your code will end up looking something like this:

validateAll () {
   let valid = true;

   let validations = []
   _.each(this.names, (name, index) => {
     validations.push(this.validateScope('name-' + index))
   });

   return Promise.all(validations)
     // consolidate the results into one Boolean
     .then(results => results.every(r => r))
}

Then, of course, you'll have to use validateAll as a promise:

this.validateAll().then(isValid => {
  if (!isValid) {
    //do whatever you need to do when something failed validation
  } else {
    // do whatever you need to do when everything is valid here
  }
})
发布评论

评论列表(0)

  1. 暂无评论