Angular 仅在创建元素后才能使用@ViewChild获取html元素
我有一个Angle组件,它的模板中有一个html元素。我希望能够在某个可观察对象发出任何值时创建元素。因此,我对元素进行了如下编码Angular 仅在创建元素后才能使用@ViewChild获取html元素,angular,rxjs,Angular,Rxjs,我有一个Angle组件,它的模板中有一个html元素。我希望能够在某个可观察对象发出任何值时创建元素。因此,我对元素进行了如下编码 <div #myDiv *ngIf="myObs | async"> this is my div </div> @ViewChild('myDiv') myDiv: ElementRef; .... ngAfterViewInit() { const myNativeElement = this.myDiv.nativeElement
<div #myDiv *ngIf="myObs | async"> this is my div </div>
@ViewChild('myDiv') myDiv: ElementRef;
....
ngAfterViewInit() {
const myNativeElement = this.myDiv.nativeElement;
doStuffWith(myNativeElement);
}
我的问题是,当运行ngAfterViewInit
时,this.myDiv
为空,并且只有在myObs
发出后才会创建它
我想知道只有在实际创建了this.myDiv
时才执行dostufwith(myNativeElement)
的最佳方法是什么
.我会在
@ViewChild
上使用setter:
@ViewChild('myDiv') set myDiv(myDiv: ElementRef) {
doStuffWith(myDiv.nativeElement);
}
一旦*ngIf
变为true
,就会调用setter
您还可以通过使用私有属性并在setter中设置来保留对元素的引用。谢谢,这项工作已经完成。但我注意到的是,在创建组件时第一次调用setter,然后在作为可观察通知的结果创建
myDiv
元素时第二次调用setter。这迫使我使用if(myDiv)
一段逻辑来保护逻辑。不管怎样,它是有效的。谢谢