在Angular 8中,使用setErrors()方法可以将一个控件设置为无效。但是,如果在模板上不更新控件的状态,可能是由于控件绑定的异步操作导致的。
解决此问题的一种方法是手动触发Angular的变更检测机制。可以通过使用ChangeDetectorRef服务来实现。
以下是一个示例代码:
在组件类中引入ChangeDetectorRef:
import { Component, ChangeDetectorRef } from '@angular/core';
@Component({ selector: 'app-your-component', templateUrl: './your-component.component.html', styleUrls: ['./your-component.component.css'] }) export class YourComponent {
constructor(private cdr: ChangeDetectorRef) { }
// 在某个方法中设置控件为无效并手动触发变更检测 setControlInvalid() { this.form.get('yourControlName').setErrors({ 'invalid': true }); this.cdr.detectChanges(); }
}
在上述示例中,通过调用form.get('yourControlName').setErrors({ 'invalid': true })方法将名为yourControlName的控件设置为无效。然后,调用this.cdr.detectChanges()方法手动触发变更检测,以更新模板中的控件状态。
希望这可以帮助你解决问题!