gpt4 book ai didi

javascript - Angular 自定义验证器不反射(reflect) View 中的更改

转载 作者:行者123 更新时间:2023-11-28 10:42:06 31 4
gpt4 key购买 nike

我有这样的自定义验证器:

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])));

在 View 中:

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

但问题是我可以看到控制台窗口,但我没有看到它反射(reflect)在 View 中。 ngIf 条件未显示错误消息

最佳答案

当您在 Angular 运行更改检测后更新了模型,或者更新根本不在 Angular 世界中时,请使用 detectorChanges()。

如果您使用 OnPush 并且通过更改某些数据来绕过 ChangeDetectionStrategy 或者您已在 setTimeout 内更新了模型,请使用 markForCheck();

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();更新表单后。

关于javascript - Angular 自定义验证器不反射(reflect) View 中的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50133751/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com