使用changeDetectionStrategy.onPush检测角度形式的变化



因此,当我使用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) {}
  1. 正常重新连接或继续角度变化检测循环。这将检查组件DOM树中的所有更改。this.cd.reattach();
  2. 根据您的意愿手动触发变化检测循环。它将验证DOM,即使不是单个实体的更改。this.cd.detectChanges();

最新更新