4

我有两个命名模板。每当第一个的内容发生变化时,我想将第一个的高度应用于第二个。我可以使用组件内的 ElementRef 访问它们。因此,当我更改绑定到第一个模板的属性时,我使用相应的 ElementRef 来获取它的高度并将其应用于第二个模板的 ElementRef。

现在,问题是,在属性更改后,我从第一个模板对应的 ElementRef 得到的高度不是更新后的高度。它返回属性更改和重新渲染之前 div 的高度。

我希望能够在 div 更新后获得实际呈现的高度。我究竟做错了什么?

更新:

编码:

var height = `${this.profile.nativeElement.offsetHeight}px`;
this.renderer.setStyle(this.board.nativeElement, "height", height);
this.renderer.setStyle(
this.board.nativeElement,
"overflow-y",
"scroll"
);

这里profile是第一个div对应的ElementRef和第二个div对应的ElementRef。属性更改后,我调用包含上述代码的函数。那么我得到的高度就是div的旧高度,也就是属性改变和重新渲染之前的高度。

4

1 回答 1

13

使用 @ViewChild 访问每个 div 对应的 ElementRef:

@ViewChild("profile") profile;
@ViewChild("board") board;

实现AfterViewChecked并在ngAfterViewChecked中执行以下操作:

constructor(private renderer: Renderer2) { 
}

ngAfterViewChecked() {
  if (this.profile && this.board) {
    var height = `${this.profile.nativeElement.offsetHeight}px`;
    this.renderer.setStyle(this.board.nativeElement, "height", height);
  }
}

renderer是在@angular/core中可用的Renderer2

于 2018-03-22T17:08:02.363 回答