Angular Material 2如何在mouseleave上关闭md-menu

时间:2017-10-20 15:59:53

标签: angular angular-material2

我正在使用Angular Material 2创建一个带有md-menu组件的菜单。 我想在鼠标离开时关闭菜单。 有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:3)

您可以使用MaterialMenuTigger中的closeMenu(),但如果您只是在菜单上放置它将不起作用。如果你围绕所有按钮包裹一个跨度并将(mouseleave)添加到spann它将起作用。

我对这个问题的解决方案是。

<button md-button [mdMenuTriggerFor]="menu">Menu</button>
<md-menu #menu="mdMenu" >
  <span (mouseleave)="trigger.closeMenu()>
    <button md-menu-item>Item 1</button>
    <button md-menu-item>Item 2</button>
  </span>
</md-menu>
<button mat-button [matMenuTriggerFor]="menu" #trigger="matMenuTrigger">Menu</button>

答案 1 :(得分:2)

将此添加到您的全局Angular样式。 (.scss

.mat-menu-panel {
  &.mouseleave {
    .mat-menu-content {
      padding: 0;
      > div {
        padding-top: 8px;
        padding-bottom: 8px;
      }
    }
  }
}

将此添加到您的组件类:

  @ViewChild(MatMenuTrigger) menuTrigger: MatMenuTrigger;

...

  closeMenu() {
    this.menuTrigger.closeMenu();
  }

创建一个这样的HTML菜单: (将班级&#34; mouseleave&#34;添加到mat-menu元素。)

  <mat-menu class="mouseleave" #menu="matMenu">
    <div (mouseleave)="closeMenu()">
      <button mat-menu-item>1</button>
      <button mat-menu-item>2</button>
      <button mat-menu-item>3</button>
      <button mat-menu-item>4</button>
    </div>
  </mat-menu>

答案 2 :(得分:0)

您可以利用Material Menu API中的closeMenu()方法,并在鼠标假期执行,如下所示:

<button md-button [mdMenuTriggerFor]="menu">Menu</button>
<md-menu #menu="mdMenu" (mouseleave)="menu.closeMenu()">
  <button md-menu-item>Item 1</button>
  <button md-menu-item>Item 2</button>
</md-menu>

应该工作。