早上好!
我正在构建Angular应用程序,我想对sidenav进行简单的切换。 html的组成如下:
this.datas
app.component.html
<div class = "main-container">
<app-navbar></app-navbar>
...
<mat-sidenav-container class = "example-sidenav-container">
<mat-sidenav #snav>
...
</mat-sidenav>
</mat-sidenav-container>
</div>
(具有app-navbar选择器)
navbar.component.html
每当我尝试单击应该打开/关闭Sidenav的按钮时,就会出现错误<mat-toolbar color = "primary" class = "topbar telative">
<button mat-icon-button (click) = "snav.toggle()">
<mat-icon>menu</mat-icon>
</button>
</mat-toolbar>
。我猜这是因为元素Cannot read property 'toggle' of undefined
与应该触发它的click事件不在同一组件中定义。有人可以告诉我如何将该引用从一个元素传递到另一个元素吗?另外,如果可能的话,有人可以给我解释一下#snav
语法在Angular元素中的作用。
预先感谢
答案 0 :(得分:0)
您可以这样做:
在navbar.component.ts中,您可以使用@output发出打开/关闭菜单的事件。
@Output() toggleSidenav = new EventEmitter();
并在navbar.component.html中发出事件。
<mat-toolbar color = "primary" class = "topbar telative">
<button mat-icon-button (click) = "toggleSidenav.emit()">
<mat-icon>menu</mat-icon>
</button>
</mat-toolbar`
最后在app.component.html中获取切换菜单事件
<app-navbar (toggleSidenav)="snav.toggle()"></app-navbar>
只需尝试。
答案 1 :(得分:-1)
请参阅此Stackblitz与您的代码一起使用(我做了一些小的更改)。 https://stackblitz.com/edit/angular-sidenav-angularmaterial?file=src/app/navbar/navbar.component.html #是@ViewChild('somename')语法的一部分,它在html模板中用于指定您正在侦听子组件,该子组件正在'somename'变量中发送信息(然后在模板中使用' #somename')。