使用onPush检测策略更改超时中的数字

时间:2018-12-30 16:07:28

标签: javascript angular angular6 immutability

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

@Input() num: number;

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

在视图中:

{{ num }}

它与默认检测策略完美配合,但是当我向组件装饰器中添加changeDetection: ChangeDetectionStrategy.OnPush时停止工作(该值始终为1,并且从未更改)。

为什么会这样?我以为onPush策略只比较引用,而分配新的整数总是会更改引用?

1 个答案:

答案 0 :(得分:0)

OnPush属性从父组件更改时,

@Input策略会检测到更改。您可以将ChangeDetectorRef注入到组件中。您可能会发现this article有用。

@Input() num: number;

constructor(private cdr: ChangeDetectorRef){}

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