首页 文章

将ng-content元素的宽度设置为通过的子项的大小

提问于
浏览
1

我有一个看起来像这样的观点:

<base-carousel>
  <div *ngFor="let item of items" carouselItem>
    <!-- content -->
  </div>
</base-carousel>

base-carousel 的模板如下所示:

<div [style.width]="getTrackWidth()">
  <ng-content select="[carouselItem]"></ng-content>
</div>

并且 base-carousel 的类看起来像这样:

@ContentChildren(CarouselItem, {read: ElementRef}) items: ElementRef[];

getTrackWidth(): string {
  return this.items.reduce((accum, curr) =>
      accum + curr.nativeElement.clientWidth, 0) + 'px';
}

问题是这会引发错误: ExpressionChangedAfterItHasBeenCheckedError

然后我尝试将 [style.width] 更改为指向一个简单的变量,我的类看起来更像这样:

trackWidth = '100%';

ngAfterViewInit() {
  this.setTrackWidth();
  this.changeDetector.detectChanges();
}

setTrackWidth(): string {
  this.trackWidth = this.items.reduce((accum, curr) =>
      accum + curr.nativeElement.clientWidth, 0) + 'px';
}

这解决了错误,但现在宽度始终设置为零,并且它不会获取子项的渲染大小 .

1 回答

  • 0

    我发现使用 ngAfterContentInit 是正确的生命周期钩子使用并解决了我的问题 .

相关问题