Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 仅在创建元素后才能使用@ViewChild获取html元素_Angular_Rxjs - Fatal编程技术网

Angular 仅在创建元素后才能使用@ViewChild获取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

我有一个Angle组件,它的模板中有一个html元素。我希望能够在某个可观察对象发出任何值时创建元素。因此,我对元素进行了如下编码

<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)
一段逻辑来保护逻辑。不管怎样,它是有效的。谢谢