次の関数を使用して一度に小さなチャンクを検証できるように、フォームをセクション化(スコープ)したシナリオがあります。
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
}
私のコメントで述べたように、あなたのコードは次のようになります:
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
}
})