使用 ViewChild 访问 MatDrawer 在 Angular 8 中引发错误

Posted

技术标签:

【中文标题】使用 ViewChild 访问 MatDrawer 在 Angular 8 中引发错误【英文标题】:Access MatDrawer using ViewChild is throwing error in Angular 8 【发布时间】:2019-10-18 23:58:27 【问题描述】:

我正在尝试使用 Angular 版本 8 中的 MatDrawer 类型的属性通过组件文件设置 MatSideNav 的行为

TypeScript 代码:

// Declaration
@ViewChild('drawer',  static: false ) public drawer: MatDrawer;

// Toggle the Side Nav bar
showSideNav(): void 
    this.drawer.toggle();

html 代码:

<mat-drawer-container>
      <mat-drawer #drawer>
        <div>Side nav bar content</div>
      </mat-drawer>
      <div>Main content</div>
</mat-drawer-container>

控制台错误:

ERROR TypeError: "this.drawer is undefined"

请帮助我如何使用@ViewChild 访问MatDrawer 元素

【问题讨论】:

将 static 设置为 true,或在模板中添加 *ngIf(他们在文档中提到了这一点,但我不太记得了) @FranciscoSantorelli - 是的,我试过了,它给出了同样的错误。 奇怪,它对我有用stackblitz.com/edit/angular-tyrccg?file=app/… @yurzui - 我仍然遇到同样的错误,请稍等,我会检查并尝试在 StackBlitz 中重现相同的错误。 试试:@ViewChild(MatDrawer) public drawer: MatDrawer 【参考方案1】:

更改声明来自

@ViewChild('drawer',  static: false ) public drawer: MatDrawer;

@ViewChild('drawer',  static: true ) public drawer!: MatDrawer;

【讨论】:

以上是关于使用 ViewChild 访问 MatDrawer 在 Angular 8 中引发错误的主要内容,如果未能解决你的问题,请参考以下文章

无法访问 Angular 父组件中的 @ViewChild 属性

@ViewChild 返回未定义。我无法访问模式内的轮播 ElementRef

为啥@ViewChild 不能在 AfterViewInit 之外运行? [复制]

typescript @ViewChild - 从父级访问CHILD COMPONENT。当您要在子组件中触发函数时,这非常有用。

viewChild如何获取angular2中用js添加的元素?

Angular 2+:获取@ViewChild() 的子元素