在Angular12中,如果要在两个ngIf中使用@ViewChild,则需要使用静态属性或装饰器,如下所示:
@ViewChild('myElement', { static: true }) myElement: ElementRef;
或者
@ViewChild('myElement', { read: ElementRef }) myElement: ElementRef;
其中,第一个@ViewChild中的static: true属性表示在组件初始化时就已经解析了视图,不需要等到ngIf条件满足才解析;而第二个@ViewChild中的{ read: ElementRef }则指定了要读取ElementRef类型的元素。
示例代码如下:
import { Component, ViewChild, ElementRef } from '@angular/core';
@Component({
selector: 'my-app',
template: `
这是第一个div
这是第二个div
`
})
export class AppComponent {
showDiv1 = true;
showDiv2 = false;
@ViewChild('myElement', {static: true}) myElement1: ElementRef;
ngAfterViewInit() {
console.log(this.myElement1.nativeElement.innerText);
}
}
在上面的示例代码中,ngAfterViewInit生命周期钩子用于在视图已经初始化之后,获取并输出myElement1元素的内容。
注意:同一页面中不能定义两个名称相同的@ViewChild元素,因此需要给不同的元素定义不同的名称。