如何订阅ElementRef.nativeElement属性的更改?

时间:2018-07-16 01:28:06

标签: angular rxjs

问题

我正在尝试找出检测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组件会渲染,但是我不明白为什么可观察对象不会再次触发。

问题

  • 这是最好的方法吗?
  • 为什么我的观察者只能发射一次?

0 个答案:

没有答案