这里,我在一个组件的HTML中有两个匹配菜单。当打开第二个匹配菜单(当我右键单击该div时,第二个匹配菜单是打开的),但是它打开了第一个匹配菜单,那么如何在一个组件中以不同的角度打开两个菜单?
HTML
(this is first menu)
<mat-icon style="cursor: pointer;" [matMenuTriggerFor]="menu">more_vert
<mat-menu #menu="matMenu">
<button mat-menu-item (click)="addNewItem()">New Folder</button>
<button mat-menu-item (click)="uploadFiles()">Upload Files</button>
</mat-menu>
</mat-icon>
(This is second menu)
<mat-card *ngFor="let imagespayload of uploadedImagesObj"(click)="activeFolder=imagespayload"
(contextmenu)="onContextMenu($event, imagespayload)">
<div style="position: fixed"
[style.left]="contextMenuPosition.x"
[style.top]="contextMenuPosition.y"
[matMenuTriggerFor]="contextMenu"
[matMenuTriggerData]="{item: imagespayload}">
</div>
<mat-menu #contextMenu="matMenu">
<ng-template matMenuContent let-item="item">
<button mat-menu-item>Action 1</button>
<button mat-menu-item>Action 2</button>
</ng-template>
</mat-menu>
TS
import { Component, OnInit, Input,ViewChild } from '@angular/core';
import { MatMenuTrigger } from '@angular/material';
@ViewChild(MatMenuTrigger) contextMenu: MatMenuTrigger;
contextMenuPosition = { x: '0px', y: '0px' };
onContextMenu(event: MouseEvent, imagespayload) {
event.preventDefault();
this.contextMenuPosition.x = event.clientX + 'px';
this.contextMenuPosition.y = event.clientY + 'px';
this.contextMenu.menuData = { imagespayload};
this.contextMenu.openMenu();
}
发布于 2018-12-06 07:06:20
第一个菜单正在打开,而不是第二个菜单,因为@ViewChild()
绑定到与给定选择器匹配的第一个指令,在本例中,该指令是第一个菜单的matMenuTrigger。若要将其绑定到第二个菜单触发器,请在带有触发器的元素上使用模板引用变量:
<div #trigger="matMenuTrigger"
style="position: fixed"
[style.left]="contextMenuPosition.x"
[style.top]="contextMenuPosition.y"
[matMenuTriggerFor]="contextMenu"
[matMenuTriggerData]="{item: imagespayload}">
</div>
然后,在您的.ts中:
@ViewChild('trigger') trigger: MatMenuTrigger;
this.trigger.openMenu();
有关使用带有指令的模板引用变量的参考,请参见角ViewChild文档、MatMenuTrigger API和这个职位。
https://stackoverflow.com/questions/53645392
复制相似问题