Angular 如何在组件中切换角度材质sidenav
如何在组件中调用角度材质sidenav动作?我有一个用例,sidenav只能在触发Angular 如何在组件中切换角度材质sidenav,angular,methods,angular-material,mat-sidenav,Angular,Methods,Angular Material,Mat Sidenav,如何在组件中调用角度材质sidenav动作?我有一个用例,sidenav只能在触发callMethods()method时打开/关闭。我不能简单地在callMethods()中传递open(e)(必需1个arugument)。有没有办法做到这一点 app.html <mat-sidenav-container class="example-container"> <mat-sidenav #sidenav [mode]="mode.value"> <p&
callMethods()
method时打开/关闭。我不能简单地在callMethods()
中传递open(e)
(必需1个arugument)。有没有办法做到这一点
app.html
<mat-sidenav-container class="example-container">
<mat-sidenav #sidenav [mode]="mode.value">
<p>
some nav here
</p>
</mat-sidenav>
<mat-sidenav-content>
<p><button mat-button (click)="open(sidenav)">Toggle</button></p>
<p>
some text here
</p>
</mat-sidenav-content>
</mat-sidenav-container>
<mat-sidenav-container class="example-container">
<mat-sidenav #sidenav [mode]="mode.value" [opened]="isShowing">
<p>
some nav here
</p>
</mat-sidenav>
<mat-sidenav-content>
<p><button mat-button (click)="toggleSidenav()">Toggle</button></p>
<p>
some text here
</p>
</mat-sidenav-content>
</mat-sidenav-container>
注意:我注意到有一个但不清楚的打开和关闭角度材料侧导航的干净方法通过组件上的[opened]参数。您可以向其传递一个布尔值,可以对其进行操作以打开/关闭侧导航 app.html
<mat-sidenav-container class="example-container">
<mat-sidenav #sidenav [mode]="mode.value">
<p>
some nav here
</p>
</mat-sidenav>
<mat-sidenav-content>
<p><button mat-button (click)="open(sidenav)">Toggle</button></p>
<p>
some text here
</p>
</mat-sidenav-content>
</mat-sidenav-container>
<mat-sidenav-container class="example-container">
<mat-sidenav #sidenav [mode]="mode.value" [opened]="isShowing">
<p>
some nav here
</p>
</mat-sidenav>
<mat-sidenav-content>
<p><button mat-button (click)="toggleSidenav()">Toggle</button></p>
<p>
some text here
</p>
</mat-sidenav-content>
</mat-sidenav-container>
1) 在组件中导入viewChild
从'@angular/core'导入{ViewChild}代码>
2) 在组件的构造函数之前获取sidenav的引用
@ViewChild('sidenav') sidenav;
3) 开自法
callMethods() {
this.open(this.sidenav); // required 1 arguments
this.otherMethod();
}
没有太多代码细节,我直接在component.ts中编写了一个自定义方法
为了避免未定义的问题,我首先声明了isShowing=false
,以便在页面构建时自动隐藏它,但这取决于您
在component.ts中
toggle():布尔值{
如果(!this.isShowing){
返回this.isShowing=true;
}
否则{
返回this.isShowing=false;
}
}
在component.html中:
这非常有效,还允许为函数toggle()提供参数以注入数据,因此您可以根据上下文使用一些参数自定义导航内容。为什么不将(单击)=“open(sidenav)”
替换为(单击)=“callMethods(sidenav)”
。您还可以定义callMethods(e:any
)传递一个参数,该参数也传递给this.open(e:any)
。这一点很好,但我必须在少数地方使用open(e)
。我认为应该是this.isShowing=!这是我的表演方法:toggleSidenav()
下的code>。这很好,但如果切换按钮位于2 diff组件中,则似乎会出错。可能需要为此使用服务?如果它们位于两个不同的组件中,则确实需要其他解决方案。可注入服务确实可以是其中之一,但基于事件的结构也可以是优雅的。但是,此示例显示了最基本的简单示例:)