gpt4 book ai didi

使用 *ngIf 显示元素后的 Angular 4 事件

转载 作者:太空狗 更新时间:2023-10-29 19:26:09 24 4
gpt4 key购买 nike

我有一个演示 Here

我在组件中有一个 div,它显示为 *ngIf

我需要知道这个元素的高度。

我似乎无法在显示元素之前或在显示元素的函数中执行此操作。

是否发生了我可以用来获取高度的事件

import { Component, Input, ElementRef, OnInit, ViewChild, AfterViewInit } from '@angular/core';

@Component({
selector: 'child-comp',
templateUrl: './child.component.html'
})

export class ChildComponent implements OnInit, AfterViewInit {

@Input() parent: ElementRef;

private block: ElementRef;

@ViewChild('block') set content(content: ElementRef) {
this.block = content;
}

show: boolean = false
blockHeight: number

constructor(){ }

// ngOnInit(){
// this.blockHeight = this.block.nativeElement.clientHeight;
// }

ngAfterViewInit(){
this.blockHeight = this.block.nativeElement.clientHeight;
console.log('AfterViewInit '+this.blockHeight);
}

showBlock(){
this.show = !this.show
this.blockHeight = this.block.nativeElement.clientHeight;
console.log('showBlock '+this.blockHeight);
}
}

最佳答案

您需要做的是在您显示 html 元素时等待 Angular 运行其更改检测。将 setTimeout() 放入您的 showBlock() 方法中,您稍等片刻,然后定义 block 元素(它存在于 DOM 中)。您无法在元素显示之前获取元素的高度,因为它不存在于 DOM 中。

在您的 showBlock 方法中:

showBlock(){
this.show = !this.show
setTimeout(()=>{ // wait a tick in order to get the element of block
this.blockHeight = this.block.nativeElement.clientHeight;
console.log('showBlock '+this.blockHeight);
});
}

查看更新 Stackblitz

关于使用 *ngIf 显示元素后的 Angular 4 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50168161/

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