email
がEmail Confirm
かどうかを確認する検証が必要でした。このため は私がangular4:valueChanges observableを使用したカスタム 'equals'検証
import { AbstractControl, ValidationErrors, FormGroup } from '@angular/forms';
export function ValidateEqual(equals: string) {
return (control: AbstractControl): ValidationErrors | null => {
const equalsField = control.root.get(equals)
if (equalsField) {
equalsField.valueChanges.subscribe(value => {
console.log('observable fired', value);
// control.updateValueAndValidity({ onlySelf: true , emitEvent: false });
});
if (control.value !== equalsField.value) {
return { equals: true };
}
}
return null;
}
}
のように見え、私のフォームは、だから私はValidateEqual()
で引数としてで平等をチェックするために、フィールドを渡しています
this.loginForm = this.fb.group({
password: [ '', [
Validators.required,
] ],
email: [ '', [
Validators.required,
Validators.email,
] ],
emailConfirm: [ '', [
Validators.required,
Validators.email,
ValidateEqual('email'),
] ]
});
のように見えるカスタム検証を作成しました。それはうまく動作します。
次のシナリオが失敗した:
1)
メール:
確認メールを[email protected]:
を[email protected] *今すぐメールを確認すると、そのエラーを示しますそれは `Email 'と等しくありません。正しい。
2)
*今私はconfirm email
フィールドに一致するようにemail
フィールドを変更します。
メール:
確認メールを[email protected]:それはどんな変化を認識していないので、confirm email
フィールド上のエラーが消えない*
私が持っている問題は、私は再検証するcontrol
フィールドを持つように等号フィールド上で観察valueChanges
を使用しようとしていますが、私はcontrol.updateValueAndValidity()
を有効にした場合、それは各キー入力に指数関数的に加入していると、ブラウザがクラッシュするということであり、 。 ITはemail confirm
フィールドに再検証するように通知するので、ほとんど動作します...ほとんど。
誰かが一度だけ購読し、再度購読しないでcontrol
フィールドの再検証を行う方法を知っていますか?ここで
これをチェックしてください:https://stackoverflow.com/questions/43487413/password-および確認パスワードフィールド検証2応答形式 – Alex