代码之家  ›  专栏  ›  技术社区  ›  Picci

仅在创建元素后才能使用@ViewChild获取html元素

  •  2
  • Picci  · 技术社区  · 7 年前

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

    <div #myDiv *ngIf="myObs | async"> this is my div </div>
    

    myObs 是可观察的。

    ViewChild

    @ViewChild('myDiv') myDiv: ElementRef;
    ....
    ngAfterViewInit() {
      const myNativeElement = this.myDiv.nativeElement;
      doStuffWith(myNativeElement);
    }
    

    我的问题是当 ngAfterViewInit this.myDiv 为null且仅在 当它被创建时,它会发出声音。

    doStuffWith(myNativeElement) 仅当 它实际上是被创造出来的。

    This is a sample code to reproduce the case .

    1 回复  |  直到 7 年前
        1
  •  4
  •   jo_va    7 年前

    我会在地板上用一个setter @ViewChild :

    @ViewChild('myDiv') set myDiv(myDiv: ElementRef) {
        doStuffWith(myDiv.nativeElement);
    }
    

    *ngIf 变成 true

    还可以通过使用私有属性并在setter中设置来保留对元素的引用。