因此,当我使用changedetectionStrategy.onPush时,我需要检测表单状态的更改。所以问题是:如果我在表单中添加了一个新的输入,但它是空的,我在表单之后删除了它。即使我删除了空的输入,状态仍然显示表单无效。因此"保存"按钮仍然被禁用。但当我按下任何其他输入表单时,状态会发生变化。
我知道这是因为我有changeDetectionStrategy。onPush
当它处于默认设置时,它可以正常工作那么,除了在默认设置上保留changeDetection之外,还有其他方法可以解决这个问题吗?
您可以像下面的一样在构造函数中导入ChangeDetectorRef
constructor(private ref: ChangeDetectorRef) {
}
别忘了这样导入:
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
然后,您可以使用方法detectChanges
,在那里您可以像下面这样运行表单状态检查:
this.ref.detectChanges();
在使用changeDetectionStrategy.onPush
策略时,您告诉angular停止运行其默认的更改检测周期。因此,在您的更改之后,您必须强制angular运行其更改检测周期。
@组件({。。。,changeDetection:ChangeDetectionStrategy.OnPush})
您有两种方法可以做到这一点。首先导入并声明ChangeDetectorRef
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
constructor(private cd: ChangeDetectorRef) {}
- 正常重新连接或继续角度变化检测循环。这将检查组件DOM树中的所有更改。
this.cd.reattach();
- 根据您的意愿手动触发变化检测循环。它将验证DOM,即使不是单个实体的更改。
this.cd.detectChanges();