如果我有多个菜单,是否可以通过编程方式切换菜单?

Kis*_*mar 5 angular2-material angular

如果我的模板中有 2 个菜单组件,如下所示

<button md-icon-button [md-menu-trigger-for]="menu">
    <md-icon>more_vert</md-icon>
</button>
<md-menu #menu="mdMenu">
  <button md-menu-item>Refresh</button>
  <button md-menu-item>Settings</button>
  <button md-menu-item>Help</button>
  <button md-menu-item disabled>Sign Out</button>
</md-menu>

<button md-icon-button [md-menu-trigger-for]="menu1">
    <md-icon>more_vert</md-icon>
</button>
<md-menu #menu1="mdMenu">
  <button md-menu-item>Refresh</button>
  <button md-menu-item>Settings</button>
  <button md-menu-item>Help</button>
  <button md-menu-item disabled>Sign Out</button>
</md-menu>
Run Code Online (Sandbox Code Playgroud)

如何以编程方式切换第二个菜单组件?通常,如果模板中只有一个菜单组件,我们可以使用 @ViewChild(MdMenuTrigger) 。有没有办法通过在@ViewChild中指定组件名称来找出第n个菜单组件并以编程方式打开菜单?

Eas*_* PI 4

首先,您需要将AfterViewInit挂钩到您的组件

class YourComponent implements AfterViewInit {

那么你可以使用@ViewChildren来做到这一点

@ViewChildren(MdMenuTrigger) triggers: QueryList<MdMenuTrigger>; 
// use ViewChildren to get a list of menu element

ngAfterViewInit() {

  // inside ngAfterViewInit lifecycle
  // you get the triggers

  this.triggers.forEach((item)=>{
    item.openMenu();
  });

}
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用名称 [md-menu-trigger-for]="menu2" #Trial="mdMenuTrigger" 访问特定菜单。请参考 Anualar 材料中的问题 https://github.com/angular/material2/issues/2421 (3认同)
  • 任何人都可以解释一下,行 `#Trial="mdMenuTrigger"` 是什么意思? (2认同)