在Angular中,在视图初始化之后,可以动态地重新计算其中的一部分;特别是:
someStream$
更新时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应该已经这样做了。