Angular6 @ViewChild在ngIf中为undefined的问题
创始人
2024-10-22 10:00:54
0

在Angular中,当使用@ViewChild装饰器在ngIf指令中时,可能会遇到一个问题,即@ViewChild定义的元素在初始时会被设置为undefined。这是因为ngIf指令的工作原理是在DOM中添加或删除元素,而@ViewChild是在组件初始化时进行绑定的,因此在元素被添加到DOM之前,@ViewChild会返回undefined

要解决这个问题,可以使用ngAfterViewInit生命周期钩子来确保获取到正确的元素引用。在ngAfterViewInit生命周期钩子中,可以通过判断ngIf指令的状态来获取元素的引用。

下面是一个示例代码:

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

@Component({
  selector: 'app-example',
  template: `
    
Element
` }) export class ExampleComponent implements AfterViewInit { @ViewChild('myElement') myElement: any; showElement = true; ngAfterViewInit() { // 使用setTimeout以确保在DOM中添加元素后再获取引用 setTimeout(() => { if (this.showElement) { console.log(this.myElement.nativeElement); } }); } toggleElement() { this.showElement = !this.showElement; } }

在上面的示例中,我们通过*ngIf指令来控制元素的显示与隐藏,并使用#myElement来定义元素的引用。然后,在ngAfterViewInit生命周期钩子中,我们使用setTimeout函数来确保在DOM中添加元素后再获取引用。在setTimeout函数中,我们检查showElement的值以确保元素已经被添加到DOM中,并输出元素的引用。

这样,无论何时ngAfterViewInit被调用,我们都可以确保获取到正确的元素引用。

相关内容

热门资讯

第3分钟窍要!德扑之心免费透视... 第3分钟窍要!德扑之心免费透视(透视)一贯是有辅助下载(哔哩哔哩)该软件可以轻松地帮助玩家将德扑之心...
第七分钟阶段!hhpoker怎... 第七分钟阶段!hhpoker怎么破解(透视)竟然有辅助开挂(哔哩哔哩)该软件可以轻松地帮助玩家将hh...
九分钟秘籍!wepoker私人... 九分钟秘籍!wepoker私人局俱乐部辅助(透视)总是是有辅助下载(哔哩哔哩)1、这是跨平台的wep...
7分钟课程!wepoker究竟... 7分钟课程!wepoker究竟有没有透视(透视)切实是真的有辅助安装(哔哩哔哩)1、用户打开应用后不...
第三分钟教程书!wepoker... 第三分钟教程书!wepoker轻量版辅助(透视)果然有辅助教程(哔哩哔哩)该软件可以轻松地帮助玩家将...
六分钟大纲!wepoker插件... 六分钟大纲!wepoker插件辅助(透视)本来是有辅助透视(哔哩哔哩)运wepoker插件辅助辅助工...
第六分钟策略!拱趴大菠萝挂哪里... 第六分钟策略!拱趴大菠萝挂哪里(透视)好像是真的有辅助神器(哔哩哔哩)1、拱趴大菠萝挂哪里辅助软件下...
5分钟技法!wpk透视工作室(... 5分钟技法!wpk透视工作室(透视)切实是有辅助教程(哔哩哔哩)wpk透视工作室脚本下载中分为三种模...
8分钟阶段!wepoker透视... 8分钟阶段!wepoker透视脚本安卓(透视)其实有辅助下载(哔哩哔哩)1、wepoker透视脚本安...
3分钟法门!如何判断wpk辅助... 3分钟法门!如何判断wpk辅助软件的真假(透视)原来是真的有辅助教程(哔哩哔哩)1、起透看视 如何判...