我正在尝试找出检测UI元素宽度变化的最佳方法,以便将宽度分配给Google图表。 Google图表不支持以%表示的宽度,因此需要为其选项数据集分配确切的宽度。
在Angular 4上运行
@ViewChild('portlet') public portlet: ElementRef;
ngAfterViewInit() { // same issue if used in ngOnInit()
this.widthObservable = new BehaviorSubject<number>
(this.portlet.nativeElement.offsetWidth);
this.widthObservable.asObservable().subscribe(e => {
console.log('Width changed', e); // only fires once for e=0
// ...
// set google chart dataset width property
// chart.redraw();
});
...
}
我只收到1条控制台日志消息Width changed 0
。当我在代码中的任何地方设置断点时(在UI初始化之后),我可以看到this.portlet.nativeElement.offsetWidth
的值非零。这是预料之中的,因为UI组件会渲染,但是我不明白为什么可观察对象不会再次触发。