Как открыть mat-menu программно?

Im пытается вызвать открытие меню при нажатии элемента 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);
}

Я пытался посмотреть на это выпуск на github что ближе к моей ситуации. но в моем случае у меня есть динамический список пунктов, которые я хотел открыть меню каждый клик.

демо

1 ответов


вам нужно добраться до MatMenuTrigger экземпляр [matMenuTriggerFor] элемент

#menuTrigger="matMenuTrigger"  [matMenuTriggerFor]="menu"

здесь

  • #menuTrigger является эталонной переменной шаблона

  • matMenuTrigger is exportAs собственность MatMenuTrigger метаданных

а затем просто позвоните

(click)="menuTrigger.openMenu()"

Stackblitz пример

подробнее о ссылочной переменной шаблона вот!--9-->