web-dev-qa-db-ja.com

Vee-スコープを使用してvalidateAll()を検証します

次の関数を使用して一度に小さなチャンクを検証できるように、フォームをセクション化(スコープ)したシナリオがあります。

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

サーバーに送信する前に、フォーム全体の最終検証を1回実行したいと思います。ただし、validateAll()は、スコープに追加された入力を取得していないようです。また、各スコープを検証し、それらがすべて有効である場合はフォームを送信しようとしましたが、すべてが非同期であるため、その方法がわかりません。

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
}
5
Neve12ende12

私のコメントで述べたように、あなたのコードは次のようになります:

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))
}

次に、もちろん、約束としてvalidateAllを使用する必要があります。

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
  }
})
4
Bert