我在点击mat-nav-list项目时尝试触发打开菜单。
HTML
<mat-nav-list>
<mat-list-item (click)="onOpenMenu(menu)" *ngFor="let i of data">
<div mat-line>
{{ i.name }}
</div>
<p mat-line>
{{ i.email }}
</p>
<button mat-icon-button [matMenuTriggerFor]="menu">
<mat-icon>more_vert</mat-icon>
</button>
</mat-list-item>
<mat-menu #menu="matMenu">
<button mat-menu-item>View profile</button>
<button mat-menu-item>Add contact</button>
</mat-menu>
</mat-nav-list>
TS
onOpenMenu(menu: any): void {
// menu doesn't have any openMenu() function
// which is of course not a trigger object but a menu itself.
console.log(menu);
}
我一直试图看看这个更接近我情况的issue on github。但在我的情况下,我有一个动态的项目列表,我想在每次点击时打开一个菜单。
答案 0 :(得分:20)
您需要从MatMenuTrigger
元素
[matMenuTriggerFor]
个实例
#menuTrigger="matMenuTrigger" [matMenuTriggerFor]="menu"
其中
#menuTrigger
是模板参考变量
matMenuTrigger
是exportAs
元数据的MatMenuTrigger
属性
然后简单地调用
(click)="menuTrigger.openMenu()"
<强> Stackblitz example 强>
在此处阅读有关模板参考变量的更多信息
答案 1 :(得分:0)
您还可以直接在代码中控制<mat-menu>
。
这是一个示例:
import { Component, ViewChild } from '@angular/core';
import { MatMenuTrigger } from '@angular/material/menu';
...
export class LanguageComponent {
@ViewChild('languageMenuTrigger') languageMenuTrigger: MatMenuTrigger;
...
openMenu() {
this.languageMenuTrigger.openMenu();
}
closeMenu() {
this.languageMenuTrigger.closeMenu();
}
}
<button
mat-button
[matMenuTriggerFor]="languageMenu"
#languageMenuTrigger="matMenuTrigger">
Language
<mat-icon>expand_more</mat-icon>
</button>
<mat-menu #languageMenu="matMenu">
<button
mat-menu-item>
English
</button>
<button
mat-menu-item>
Français
</button>
</mat-menu>