首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >角:两个如何在一个HTML中打开两个垫菜单?

角:两个如何在一个HTML中打开两个垫菜单?
EN

Stack Overflow用户
提问于 2018-12-06 05:53:44
回答 1查看 2.5K关注 0票数 1

这里,我在一个组件的HTML中有两个匹配菜单。当打开第二个匹配菜单(当我右键单击该div时,第二个匹配菜单是打开的),但是它打开了第一个匹配菜单,那么如何在一个组件中以不同的角度打开两个菜单?

HTML

代码语言:javascript
运行
复制
(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

代码语言:javascript
运行
复制
  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();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-06 07:06:20

第一个菜单正在打开,而不是第二个菜单,因为@ViewChild()绑定到与给定选择器匹配的第一个指令,在本例中,该指令是第一个菜单的matMenuTrigger。若要将其绑定到第二个菜单触发器,请在带有触发器的元素上使用模板引用变量:

代码语言:javascript
运行
复制
<div #trigger="matMenuTrigger"
    style="position: fixed"
    [style.left]="contextMenuPosition.x"
    [style.top]="contextMenuPosition.y"
    [matMenuTriggerFor]="contextMenu"
    [matMenuTriggerData]="{item: imagespayload}">
</div>

然后,在您的.ts中:

代码语言:javascript
运行
复制
@ViewChild('trigger') trigger: MatMenuTrigger;

this.trigger.openMenu();

有关使用带有指令的模板引用变量的参考,请参见角ViewChild文档MatMenuTrigger API这个职位

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53645392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档