2017-11-27 18 views
0

私はユーザー名、パスワード、および確認パスワードフィールドを持つフォームを持っています。検証ツールモデル駆動型(反応型)フォーム

  1. パスワードは、ユーザ名に
  2. パスワードが含まれており、同じ「パスワード」

    export class ValidationService { 
    
    
        static getValidatorErrorMessage(validatorName: string, validatorValue?: any) { 
        let config = { 
         'required': 'Required', 
    
         'invalidPasswordUser': 'Invalid password. Password must not contain the username!', 
    
         'passwordMismatch':'Password mismatch ', 
         'minlength': `Minimum length ${validatorValue.requiredLength}`, 
         'maxlength': `Maximun length ${validatorValue.requiredLength}` 
        }; 
    
        return config[validatorName]; 
        } 
    
    static passwordMatchValidator(control) { 
    
    if (control.value) { 
    
    
        if (control.value === control.parent.value.password) { 
    
        return null; 
        } 
        else{ 
    
        return { 'passwordMismatch': true}; 
    
        } 
    } 
    

    を含んでいなければならないパスワードフィールドを確認してはいけません。私はこの2つのチェックsが持っているこの検証サービスを使用しています}

    静的usernameCheckValidator(コントロール){

    if (control.value) { 
    
        if (!control.value.toUpperCase().includes(control.parent.value.username.toUpperCase())) { 
    
        return null; 
        } 
        else{ 
    
        return { 'invalidPasswordUser': true}; 
        } 
    } 
    
    場合、私は、ユーザー名の前に書くとパスワードの後に​​、それは正しい方法で作業する場合は、最初のチェックについて

    this.userForm = this.formBuilder.group({ 
    
         'username': ['',[ Validators.required,Validators.minLength(4),Validators.maxLength(20)]], 
         'password': ['', [Validators.required,Validators.minLength(6),ValidationService.usernameCheckValidator,Validators.maxLength(20)]], 
         'confirm': ['', [Validators.required,ValidationService.passwordMatchValidator,Validators.maxLength(20)]], 
         'profile': ['', [Validators.required]], 
        }); 
    

    :0

    }}

は、これは形式ですパスワードが正しくない(ユーザー名が含まれているため)、メッセージが表示されます。代わりに、ユーザー名を変更する(パスワードを書き込む)場合、パスワードメッセージは表示されません。 同じ動作に2番目のチェックがあります。ですから、現時点では、私は「片道」バリデーターのようなものを持っています。 どこに問題がありますか?

答えて

0

は限り私はあなたがユーザ名を変更したときに、それは、パスワードをチェックしないであろうことを意味し、コントロール自体を変更したときにAbstractControlの検証関数が呼び出される知っているように、それだけでユーザー名をチェックします。

ソリューションは、一般的に、フォームのユーザー名制御TOTや検証のためのパスワード検証を書くこと、そしてそこに他のフィールドを必要と検証をチェックすることです。以下のような何か:

formValidation(formGroup){ 
     if(formGroup.value.password.toUpperCase().includes(formGroup.value.username.toUpperCase()) 
       return {someError:'error'} 
    } 
関連する問題