在使用OnPush策略的情况下,Angular不会自动检测响应式表单的状态更改。因此,解决此问题的一种方法是通过强制更改检测来手动更新视图。
以下是实现此解决方案的示例代码:
在你的组件中注入ChangeDetectorRef:
import { ChangeDetectorRef } from '@angular/core';
constructor(private cdr: ChangeDetectorRef) {}
在设置表单控件的错误时,手动调用ChangeDetectorRef.markForCheck()方法:
this.formArray.controls[index].get('controlName').setErrors({ error: true }); this.cdr.markForCheck();
这将会更新视图并反映表单控件的错误状态。
请注意:在可能出现大量表单控件的表单中,频繁地使用markForCheck() 是不推荐的,因为它可能会导致性能问题。因此,在这种情况下,您可能需要考虑采用其他的优化策略。