Reputation: 2789
I am using Angular Material 2 to create a menu with md-menu component. I want to close menu on mouse leave. Can anyone point me in the right direction?
Upvotes: 0
Views: 5399
Reputation: 2775
Add this to your global Angular styles. (.scss
)
.mat-menu-panel {
&.mouseleave {
.mat-menu-content {
padding: 0;
> div {
padding-top: 8px;
padding-bottom: 8px;
}
}
}
}
Add this to your component class:
@ViewChild(MatMenuTrigger) menuTrigger: MatMenuTrigger;
...
closeMenu() {
this.menuTrigger.closeMenu();
}
Create an HTML menu like this:
(Add the class "mouseleave" to your mat-menu
element.)
<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>
Upvotes: 3
Reputation: 94
You can use closeMenu() from the MaterialMenuTigger but it will not work if you put is just on the menu. If you wrapp a span around all buttons and add (mouseleave) to the spann it will work.
My solution for the problem was.
<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>
Upvotes: 4
Reputation: 24462
You can take leverage of the closeMenu()
method from the Material Menu API and execute it on mouse leave as follows:
<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>
Should work.
Upvotes: 0