2

フォームのパスワードとリピートパスワードを検証しようとしています。枚このパスワードの検証が正常に動作しない

import { FormGroup, FormBuilder, Validators, AbstractControl } from '@angular/forms'; 

this.registerForm = fb.group({ 
     name: ['', Validators.required], 
     email: ['', Validators.compose([Validators.pattern("[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"), Validators.required])], 
     passwords: this.fb.group({ 
      password: ['', Validators.compose([Validators.required])], 
      repassword: ['', Validators.compose([Validators.required])] 
      }, this.comparePassword) 
    }); 

function comparePassword(c: AbstractControl) { 
return c.get('password').value === c.get(' repassword').value 

}

**私としてもcomparePasswordに虚偽のリターンを渡してみました:

comparePassword(c: AbstractControl) { 
     return false; 
    } 

**が、すべての時間にconsole.log(this.registerForm.valid)。私には本当のことですが、パスワードとリピートパスワードに異なる入力を与えている場合はfalseを返します。だから、これを解決する方法を手伝ってください。事前にありがとう

答えて

1

奇妙なこと:カスタム検証return nullとき有効する必要があります。

検証はあなたが{ "comparePassword": true }

は、だから私はあなたの関数があるべきだと思う検証エラーを返す必要が失敗した場合:

Angular.io Custom validation

comparePassword(control: AbstractControl) { 
    if(control.get('password').value === control.get('repassword').value){ 
     return null; 
    } 

    return { “comparePassword”: true }; 
} 
は:この関数は、角度コントロールオブジェクトを返すのいずれかの場合はnullを取ります制御値が有効であるか、または検証エラーオブジェクトです。検証エラーオブジェクトは通常、検証キーである 'forbiddenName'であり、その値はエラーメッセージ({name})に挿入できる値の任意の辞書です。

+0

{validator: this.comparePassword} 

を返信してくれてありがとう:私は同じでしたが、しかし、私は何かが欠けていると思う。私はcontrol.get( 'password')の値を調べることができます。私はconsole.logを使ってそれを行うことができません。 –

+1

'if'コントロールにデバッグポイントを置きます。コンソールで 'control.get( 'password')。value'を実行してみてください。 – ulubeyn

1

これが設定され、フォームのビルドで

comparePassword = (control: AbstractControl): {[key: string]: boolean} => { 
    // get values 
    const password = control.get('password'); 
    const repassword = control.get('repassword'); 
    // if no values, validated as true 
    if (!password || !repassword) { 
     return null; 
    } 
    // if values match, return null, else nomatch: true 
    return password.value === repassword.value ? null : { nomatch: true }; 
    }; 

、その後に動作するはずです:

this.registerForm = fb.group({ 
    name: ['', Validators.required], 
    email: ['', Validators.compose([Validators.pattern("[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"), Validators.required])], 
    passwords: this.fb.group({ 
     password: ['', Validators.compose([Validators.required])], 
     repassword: ['', Validators.compose([Validators.required])] 
     },{validator: this.comparePassword}) // here 
}); 
関連する問題