我很久以前就试图解决如何使用matMenu作为上下文菜单,在某人在我的元素上右键单击时触发。
这是我的菜单:
我希望能够在右键单击此元素时触发菜单:
这是我的菜单:
<mat-menu #contextMenu="matMenu">
<button mat-menu-item>
<mat-icon>table_rows</mat-icon>
<span>Select Whole Row</span>
<span>⌘→</span>
</button>
<button mat-menu-item>
<mat-icon>functions</mat-icon>
<span>Insert Subtotal</span>
<span>⌃S</span>
</button>
</mat-menu>
我希望能够在右键单击此元素时触发菜单:
<div tabindex=0 *ngIf="!hasRowFocus"
class="display-cell" (keydown)="onSelectKeyDown($event)"
(click)=selectCellClick($event)
(dblclick)=selectCellDblClick($event)
(contextmenu)="openContextMenu()"
[ngClass]='selectClass'
(mouseover)="mouseover()"
(mouseout)="mouseout()"
#cellSelect >
<div (dragenter) = "mouseDragEnter($event)" (dragleave) = "mouseDragLeave($event)">{{templateDisplayValue}}</div>
</div>
然而,根据文档,我需要指定这个div应该有[matMenuTriggerFor]
指令,这样当右键单击触发openContextMenu()
时,我可以获取到触发元素的引用,然后调用triggerElement.trigger()
来生成菜单。
问题是,设置[matMenuTriggerFor]
似乎自动连接到了点击事件,而不是右键单击事件,所以无论我在元素上左键单击还是右键单击,上下文菜单都会打开,这不是期望的行为。
我已经看到类似此Stackblitz中的解决方法,它创建一个隐藏的div作为触发元素,但需要提供x和y坐标来定位菜单元素,这似乎不太理想。
是否有任何方法可以在输入元素上右键单击而无需创建虚拟元素来托管matMenuTriggerFor指令?