我在上下文菜单中使用右键单击功能时遇到问题。我的菜单项没有显示,因为我的第二个ngFor=“let row”条件。。。但我需要右键单击选中的行对象,以便从该行传入json值。
现在模式正在弹出,但没有显示菜单项按钮,因此我无法使用click事件。
我做错了什么?
view.component.html
<!--Context Right Click Menu-->
<mat-menu #contextMenu="matMenu" #contextMenu2="matMenu">
<ng-container *ngFor="let funct of FunctionNames">
<ng-container *ngFor="let row">
<div mat-menu-item>
<button mat-menu-item (click)="onContextMenuAction(row)">{{funct}}</button>
</div>
</ng-container>
</ng-container>
</mat-menu>
<!--Context Right Click Menu-->
<mat-menu #contextMenu="matMenu" #contextMenu2="matMenu">
<ng-container *ngFor="let funct of FunctionNames">
<ng-container *ngFor="let row">
<div mat-menu-item>
<button mat-menu-item (click)="onContextMenuAction(row)">{{funct}}</button>
</div>
</ng-container>
</ng-container>
</mat-menu>
view.component.ts
onContextMenuAction(row: any) {
console.log(row);
}
第二个*ngFor
不包含要循环的数组。如果你需要索引,你可以直接在你的第一个
<mat-menu #contextMenu="matMenu" #contextMenu2="matMenu">
<ng-container *ngFor="let funct of FunctionNames">
<div mat-menu-item>
<button mat-menu-item (click)="onContextMenuAction(funct)">{{funct}}</button>
</div>
</ng-container>
</mat-menu>
组成部分
onContextMenuAction(funct) {
// you should get entire row data here
}
您试图在模板中获得对角材料菜单数据的引用。
您可以使用:let refrenceName=“dataItemKey”
来完成。
它将获得一个名为referencename
的引用,指向键名为dataItemKey
的菜单数据。
在你的情况下,就像:let-row="row"
<mat-menu #contextMenu="matMenu">
<ng-template matMenuContent let-row="row">
<button mat-menu-item (click)="onContextMenuAction1(row)">Action 1</button>
<button mat-menu-item (click)="onContextMenuAction2(row)">Action 2</button>
</ng-template>
</mat-menu>
还要确保将行
菜单数据设置为:
this.contextMenu.menuData = { 'row': yourValue };
所以你可以参考它。
完整的实例
我在Visual Studio C#IDE中定义了一个ContextMenuStri上下文菜单,并对程序进行编码,以便当用户右键单击屏幕上的一个对象时,上下文菜单成功弹出。用户可以从上下文菜单中选择一个项目,代码成功确定用户选择了哪个上下文菜单项。到目前为止还不错。问题是上下文菜单接受右键单击作为选择上下文菜单项的机制。当我不小心双击右键单击屏幕上的一个对象时,我注意到了这一点...菜单在第一次单
Since 9.9 popMenuClick 标题栏右边popMenu点击后触发的事件 使用方法 document.addEventListener('popMenuClick', function(e) { //得到name属性值 console.log(e.data.title); // 这里不是name,是title }, false); 代码演示 基本功能演示 <h1>请点击右上
问题内容: 这并不是说我要防止“查看源代码”或类似的愚蠢行为,而是要为某些元素制作一些自定义上下文菜单。 编辑:答案的答复:我已经尝试过: 问题答案: 捕获事件,然后在事件处理程序中返回false。 无论如何,您也可以在某些浏览器中捕获click事件并使用哪个鼠标按钮触发该事件。
问题内容: 我想知道是否有最佳实践/正确的方法来为React组件设置右键菜单。 我目前有这个… 可以,但是感觉有点混乱,我想知道是否还有其他方法可以使用,任何信息将不胜感激, 谢谢! 问题答案: 更新: 想通了-这是您可以做的 在渲染中,您可以将函数传递给onContextMenu,以使该react组件发生右键单击。
问题内容: 我当前正在通过右键单击实例化并将其位置设置为鼠标位置的位置来创建右键单击上下文菜单。是否有更好的方法? 问题答案: 您可能正在手动调用菜单。这会导致菜单中出现一些令人讨厌的越野车行为。 该方法处理所有需要发生的事情(在鼠标悬停时突出显示事情,并在必要时关闭弹出窗口),其中使用只是显示菜单而无需添加任何其他行为。 要进行右键单击弹出菜单,只需创建一个。 然后,您所要做的就是向要弹出菜单的
当用户在网页中点击鼠标右键后,会唤出一个菜单,在上面有复制、粘贴和翻译等选项,为用户提供快捷便利的功能。Chrome也将这里开放给了开发者,也就是说我们可以把自己所编写的扩展功能放到右键菜单中。 要将扩展加入到右键菜单中,首先要在Manifest的permissions域中声明contextMenus权限。 "permissions": [ "contextMenus" ] 同时还要在i