开发者问题收集

Angular:ViewChild 上的 nativeElement 未定义

2017-08-28
57296

我想使用 ViewChild 访问组件的 DOM。但是当我尝试访问 nativeElement 属性时,它为 undefined

以下是代码片段。

import { Component, ViewChild, AfterViewInit } from '@angular/core';
import { AlertComponent } from './alert.component';

@Component({
    selector: 'app-root',
    template: `
    <app-alert #alert>My alert</app-alert>
      <button (click)="showAlert()">Show Alert</button>`
})
export class AppComponent implements AfterViewInit {
  @ViewChild('alert') alert;

  showAlert() {
    console.log('alert (showalert)', this.alert.nativeElement);
    this.alert.show();
  }

  ngAfterViewInit() {
    console.log('alert (afterviewinit)', this.alert.nativeElement);
  }
}

请查看 plunk

1个回答

如果要获取承载组件或指令的元素的引用,则需要指定您想要元素而不是组件或指令

@ViewChild('alert', { read: ElementRef }) alert:ElementRef;

另请参阅 angular 2 / typescript:获取模板中的元素

就您而言,我猜您需要两个不同的 @ViewChild() ,一个用于组件引用以便能够访问 show() 方法,第二个用于能够访问 DOM 属性。

Plunker 示例

Günter Zöchbauer
2017-08-28