3

如何在组件中调用角度材质 sidenav 动作?我有一个用例,sidenav 只能在callMethods()方法触发时打开/关闭。我也不能简单地传入open(e)callMethods()需要 1 个参数)。有没有办法做到这一点?

应用程序.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>

应用程序.ts

open(e: any) {
    e.toggle();
  }

  callMethods() {
    this.open(); // required 1 arguments
    this.otherMethod();
  }
anotherMethod() {
    this.open(); // required 1 arguments
    this.otherMethod();
  }

注意:我注意到有一个帖子但不清楚

4

4 回答 4

4

打开和关闭角材质侧导航的一种很好的干净方式是通过组件上的[opened]参数。你可以给它传递一个布尔值,你可以操纵它来打开/关闭侧导航。

应用程序.html

<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>

如果按如下方式实现,您的 callMethods 函数可以干净地调用您的切换方法:

应用程序.ts

isShowing: boolean;

toggleSidenav() {
   this.isShowing = !this.isShowing;
}

callMethods() {
    this.toggleSidenav();
}

 
于 2019-11-14T08:29:04.213 回答
1

在没有太多代码细节的情况下,我直接在 component.ts 中编写了一个自定义方法

为了避免未定义的问题,我首先声明isShowing = false在页面构建时自动隐藏它,但这取决于你。

在组件.ts

toggle(): boolean{
    if (!this.isShowing){
        return this.isShowing = true;
    }
    else{
        return this.isShowing = false;
    }
}

在 component.html 中:

<mat-drawer [opened]="isShowing"></mat-drawer>

这非常有效,还允许为函数 toggle() 提供参数以注入数据,因此您可以使用取决于您的上下文的一些参数自定义导航内容。

于 2020-11-27T13:34:25.113 回答
1

我的方式

  1. 使用@Output()

     <mat-sidenav #sidenav ></mat-sidenav>
     <app-header (toggleMenuEvent)="sidenav.toggle()"></app-header>
    
  2. 和 EventEmiter

     export class HeaderComponent implements OnInit {
    
     @Output() toggleMenuEvent = new EventEmitter<void>();    
    
     constructor() { }
    
     ngOnInit(): void {
     }
    
     public toggleMenu() {
         this.toggleMenuEvent.emit();
     } 
    
于 2021-11-18T15:10:26.833 回答
0

1) 在您的组件中导入 viewChild。

import { ViewChild } from '@angular/core';

2) 在组件的构造函数之前获取 sidenav 的引用

@ViewChild('sidenav') sidenav;

3)从方法打开

callMethods() {
  this.open(this.sidenav); // required 1 arguments
  this.otherMethod();
}
于 2019-11-14T08:31:30.990 回答