Angular:RequestAnimationFrame和ChangeDetectorRef用于更新视图

时间:2017-11-20 13:36:20

标签: javascript angular browser

在Angular中,在视图初始化之后,可以动态地重新计算其中的一部分;特别是:

  • someStream$更新时
  • 我读了DOM中已经渲染的元素的值
  • 并根据读取值
  • 设置另一个元素的值(其高度)
  • 模板中的属性侦听器会根据viewHeight
  • 设置高度

所以代码看起来像这样:

this._subs.push(this.someStream$.subscribe(() => {
  this.zone.runOutsideAngular(() => {
    requestAnimationFrame(() => {
      const spaceTop: number = this.hostEl.nativeElement.getBoundingClientRect().top;
      this.viewHeight = window.innerHeight - spaceTop;
      this.cdr.detectChanges();
    });
  });
}));

<someElement [style.height.px]="viewHeight"></someElement>

我需要ChangeDetectorRef.detectChanges();立即应用更改。我的问题是,为什么我还需要requestAnimationFrame?没有它,为什么代码不起作用?从我的理解requestAnimatoinFrame触发重新渲染(以浏览器优化的方式),但由ChangeDetectorRef激活的NgZone应该已经这样做了。

0 个答案:

没有答案