我在獲取 PageSlotComponent(例如“TopHeaderSlot”)或組件的動態高度時遇到問題。
我使用 ViewChilder 或 ViewChild 嘗試過,但組件內部有 *ngIf。
@ViewChildren('topHeader') public topHeader?: QueryList<ElementRef>;
即使我在嘗試列印時看到一個值 offsetHeight,它也會回傳“0”。這背后的原因是因為 DOM 還沒有準備好,所以結果為零。
ngAfterViewInit(): void {
if (this.topHeader) {
console.log(this.topHeader) // prints ElementRef with a value
console.log(this.topHeader.first)
console.log(this.topHeader.first.nativeElement.offsetHeight) // doesnt return a value
}
}
如何獲取組件或插槽的高度?
uj5u.com熱心網友回復:
您的答案將取決于您希望在何時何地使用此高度。
安裝組件后,您將獲得初始渲染的高度。所以,如果你的組件用 隱藏*ngIf,你就不能擁有它。否則,您應該具有價值。
您必須始終使用 where/when 條件來獲得高度,所以我建議您創建一個為您執行此操作的 getter:
get compHeight() {
return this.topHeader?.first?.nativeElement?.offsetHeight ?? -1;
}
如果您得到 -1,則不會顯示您的組件。
除此之外,要知道當控制臺顯示非原始元素時,顯示是延遲的:物件是在您展開物件時評估的,而不是在您呼叫 console.log 的那一刻。因此,即使原始控制臺將其顯示為相反,您也可以看到一個元素(或看不到它)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518336.html
