Angular ChangeDetection不适用于ChangeDetectionStrategy.OnPush的按钮禁用属性

时间:2019-04-26 17:45:44

标签: angular

使用ChangeDetectionStrategy.OnPush避免一次又一次地检查页面的更改,但是在需要时我明确地将其命名为ChangeDetection

我有ReactiveForm的验证信息:

this.form = this.fb.group({
 station: ['', Validators.required],
 startDate: ['', Validators.required],
 endDate: ['', Validators.required],
 dataType: ['', Validators.required],
});

按钮的HTML标记:

<button [disabled]="!form.valid">Submit</button>

当最后一次输入更改时,我称以下内容:

dateChange() {
  console.log(this.form.valid)
  this.cd.detectChanges();
}

控制台返回true,但该按钮未启用(不可单击)。

3 个答案:

答案 0 :(得分:1)

使用markForCheck()代替detectChanges()

答案 1 :(得分:1)

您正在使用OnPush,为什么不使用Observable和async管道来控制表单的状态,而不是手动触发更改检测?两者兼而有之对我来说适得其反?

<button [disabled]="!(dataSource$ | async)">Submit</button>

答案 2 :(得分:0)

ZipInputStream

disabled是HTML属性,只要它具有设置的值即可。...将其更改为null而不是false应该可以解决问题。