angular - 如何防止点击显示垫菜单?

标签 angular angular-material

我想在 mouseover 和 mouseout 时显示和隐藏 Mat-menu,但是如何防止在点击时显示 mat-menu?

HTML

<button mat-mini-fab color="primary" [matMenuTriggerFor]="menu"
  (mouseenter)="openMenu()">
  <img class="face" *ngIf="isLoginIn()" [src]="faceUrl">
</button>
<mat-menu #menu="matMenu">
  <div (mouseleave)="closeMenu()">
    <button class="login-menu-item" mat-flat-button color="primary">Login</button>
    <button class="login-menu-item" mat-flat-button color="">Logout</button>
  </div>
</mat-menu>

最佳答案

您可以使用 div 而不是按钮,然后您只需要获取对 matMenuTrigger 的模板引用即可调用 mouseenter 上的打开和关闭方法和 mouseleave 事件。

<div mat-mini-fab color="primary" #menuTrigger="matMenuTrigger [matMenuTriggerFor]="menu" (mouseenter)="menuTrigger.openMenu()">
  <img class="face" *ngIf="isLoginIn()" [src]="faceUrl">
</div>
<mat-menu #menu="matMenu">
  <div (mouseleave)="menuTrigger.closeMenu()">
    <button class="login-menu-item" mat-flat-button color="primary">Login</button>
    <button class="login-menu-item" mat-flat-button color="">Logout</button>
  </div>
</mat-menu>

修订

看起来像是为 mat-menu 创建一个包装器 DIV 并将 matMenuTrigger 分配给该包装器 DIV将阻止通过单击顶部 MENU DIV 打开菜单。

<div (mouseenter)="menuTrigger.openMenu()">Menu</div>
<div #menuTrigger="matMenuTrigger" [matMenuTriggerFor]="menu">
    <mat-menu #menu="matMenu" >
       <div (mouseleave)="menuTrigger.closeMenu()">
          <button mat-menu-item>Item 1</button>
          <button mat-menu-item>Item 2</button>
       </div>
    </mat-menu>
</div>

关于angular - 如何防止点击显示垫菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53353700/

相关文章:

angular - 内部带有 *ngIf 的模板,更改模型后不起作用

Angular Material,使用没有卡片的mat-card-avatar

angular - 如何为 Angular Material2 添加 Facebook 图标?

angular - 如何将 'on' 、 'off' 标签添加到 mat-slide-toggle ?

javascript - token 拦截器不会再次发送原始请求(Angular、Node.js)

angular - 如何定义外部库的类型。 TypeScript、Angular 和 Google Picker

angular - 在为所有平台设计响应式应用程序时,我应该使用 MDBootstrap 还是 Material 2 进行设计

javascript - Angular Reactive Forms - 排除表单提交上的空白字段

Angular Material 日期选择器无法动态命名

angular - 2000 毫秒后微调器未显示