1
である場合、私は特定のフィールドのための非同期バリデータフォームの2つのフィールドのための別のものを書いてきました:FormGroup非同期バリFormControlがエラー
this.aliasCtrl = formBuilder.control('', [], [
(control: AbstractControl) => {
return new Promise(resolve => {
if(control.value === 'aaa') {
resolve({error: true});
} else {
resolve(null);
}
});
}
]);
this.formGroup = formBuilder.group({
firstName: formBuilder.control('', []),
lastName: formBuilder.control('', []),
alias: this.aliasCtrl
}, {
asyncValidator: (group: FormGroup) => {
return new Promise(resolve => {
if(group.value.firstName === 'aaa' && group.value.lastName === 'aaa') {
resolve({error2: true});
} else {
resolve(null);
}
});
}
});
それらの両方が正しく機能しています。ポイントは、エイリアスコントロールバリデータがエラーをスローするとき(フィールドにaaa
が含まれているとき)、「グローバル」は決してしません。
私の問題のplunker:
http://plnkr.co/edit/vyr48ke7fWEUwrXy43tn?p=previewは再現方法:
- が最初の1で始まるすべてのフィールドで
aaa
を置きます。良い、すべてが動作します。 - プランナーをリロードします。
- 最後のフィールドからすべてのフィールドに
aaa
を入力します。firstName
のlastName
フィールドを編集するときには、「グローバル」バリデータは呼び出されません(バリデータが呼び出されたときに見るために、私はplunkerにconsole.log
を追加しました)。
この動作は意図的ですか?どうして?エラーが既に存在する場合、「グローバル」バリデータイベントを呼び出す方法は?
エラーはすでに、あなたはおそらく検証を行って存在している場合。 –
それでは、 'alias'フィールドのバリデーターが私が既にエラーを起こしたときにトリガーされるのはなぜですか?(' firstName'と 'lastName'は' alias'フィールドの前に 'aaa'を書き込むと同じです)?私は一貫性が必要だと思う。 – Happy