首页 > 解决方案 > 使用 onPush 检测策略在超时中改变数字

问题描述

我想设置一个参数的默认值并在 2 秒后对其进行变异,这就是我所拥有的:

@Input() num: number;

ngOnInit() {
  this.num = 1;
  setTimeout(() => ++this.num, 2000);
}

在视图中:

{{ num }}

它与默认检测策略完美配合,但是当我添加changeDetection: ChangeDetectionStrategy.OnPush到组件装饰器时停止工作(值始终1并且永远不会改变)。

为什么呢?我认为onPush策略只比较引用,分配一个新的整数总是会改变一个引用?

标签: javascriptangularangular6immutability

解决方案


OnPush@Input当属性从父组件更改时,策略会检测更改。您可以注入ChangeDetectorRef您的组件。您可能会发现这篇文章很有帮助。

@Input() num: number;

constructor(private cdr: ChangeDetectorRef){}

ngOnInit() {
  this.num = 1;
  setTimeout(() => {
    ++this.num, 2000;
    this.cdr.detectChanges();
  });
}

推荐阅读