gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 07:32:30 25 4
gpt4 key购买 nike

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

<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';
}

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

最佳答案

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

关于angular - 将 ng-content 元素的宽度设置为通过的子元素的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51188013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com