I have been trying to sort out how to use a matMenu as context menu triggered when somebody right clicks on one of my elements.
This is my menu:
<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>
I want to be able to trigger the menu when this element is right-clicked:
<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>
However, according to the documentation, I need to specify this div should have the [matMenuTriggerFor] directive, so that so when openContextMenu() it triggered by right clicking, I can call get a reference to the trigger element and then call triggerElement.trigger() to spawn the menu.
Problem is it appears that setting [matMenuTriggerFor] is hooked up to the click event automatically, not the right click event, so anytime I left click on the element the context menu opens, which is not the desired behavor.
I have seen workarounds like this one on Stackblitz which creates a hidden div as the trigger element, but requires supplying x & y coordinates for the location of the menu element which seems suboptimal.
Any way to have the menu triggered by right clicking on the input element without having to create a dummy element to host the matMenuTriggerFor directive?