Угловой пользовательский валидатор не отражает изменений в представлении

1

У меня есть пользовательский валидатор:

export class PasswordValidator {
    static MatchPassword(AC: AbstractControl) {
        const formGroup = AC.parent;

        if(formGroup) {
            let password = formGroup.value.password // to get value in input tag
            let confirmPassword = formGroup.value.confirmPassword; // to get value in input tag
            if(password != confirmPassword) {
                formGroup.get('confirmPassword').setErrors({ matchPassword: true });
            } else {
                formGroup.get('confirmPassword').setErrors(null);
            }
            console.log(formGroup.get('confirmPassword').errors);
        } else {
            return null
        }
     }
}

И я добавил к форме:

this.registerationForm.addControl("confirmPassword", new FormControl('', Validators.compose([Validators.required, PasswordValidator.MatchPassword])));

И в Вид:

  <ion-item class="error-message" *ngIf="registerationForm.controls.confirmPassword.hasError('matchPassword') 
    && registerationForm.controls.confirmPassword.touched">
    <p>Some message*</p>
  </ion-item>

Но проблема в том, что я могу видеть окно консоли, но я не вижу, что это отражает. ngIf не показывает сообщение об ошибке

Теги:
angular
ionic-framework
angular-forms

1 ответ

0

Используйте функцию detectChanges(), когда вы обновили модель после того, как угловые запустили ее изменение обнаружения, или если обновление не было в угловом мире вообще.

Используйте markForCheck(), если вы используете OnPush, и вы обходите ChangeDetectionStrategy, изменяя некоторые данные или обновляя модель внутри setTimeout;

export class PasswordValidator {
static MatchPassword(AC: AbstractControl) {
    const formGroup = AC.parent;

    if(formGroup) {
        let password = formGroup.value.password // to get value in input tag
        let confirmPassword = formGroup.value.confirmPassword; // to get value in input tag
        if(password != confirmPassword) {
            formGroup.get('confirmPassword').setErrors({ matchPassword: true });
        } else {
            formGroup.get('confirmPassword').setErrors(null);
        }
        console.log(formGroup.get('confirmPassword').errors);
        this.ref.markForCheck();
    } else {
        return null
    }
 }
}

добавьте this.ref.markForCheck(); после того, как вы обновите форму.

  • 0
    Как я собираюсь ввести это в этот статический метод?
  • 0
    У вас есть jsFiddle, созданный для того же?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню