Skip to content
This repository was archived by the owner on Sep 5, 2024. It is now read-only.

Commit b8045df

Browse files
Frank3KThomasBurleson
authored andcommitted
feat(menu): do not propagate event in mdOpenMenu
Do not propagate the event in mdOpenMenu. This way a menu can be nested in elements that also have handlers of the same event type, without triggering any of these events. To enable this functionality, `$event` should be passed as the first argument to `$mdOpenMenu`. Fixes #3296. Closes #3332.
1 parent 62f5c7b commit b8045df

File tree

5 files changed

+17
-14
lines changed

5 files changed

+17
-14
lines changed

src/components/menu/_menu.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ angular.module('material.components.menu', [
2222
*
2323
* Every `md-menu` must specify exactly two child elements. The first element is what is
2424
* left in the DOM and is used to open the menu. This element is called the trigger element.
25-
* The trigger element's scope has access to `$mdOpenMenu()`
26-
* which it may call to open the menu.
25+
* The trigger element's scope has access to `$mdOpenMenu($event)`
26+
* which it may call to open the menu. By passing $event as argument, the
27+
* corresponding event is stopped from propagating up the DOM-tree.
2728
*
2829
* The second element is the `md-menu-content` element which represents the
2930
* contents of the menu when it is open. Typically this will contain `md-menu-item`s,
@@ -32,7 +33,7 @@ angular.module('material.components.menu', [
3233
* <hljs lang="html">
3334
* <md-menu>
3435
* <!-- Trigger element is a md-button with an icon -->
35-
* <md-button ng-click="$mdOpenMenu()" class="md-icon-button" aria-label="Open sample menu">
36+
* <md-button ng-click="$mdOpenMenu($event)" class="md-icon-button" aria-label="Open sample menu">
3637
* <md-icon md-svg-icon="call:phone"></md-icon>
3738
* </md-button>
3839
* <md-menu-content>
@@ -74,7 +75,7 @@ angular.module('material.components.menu', [
7475
*
7576
* <hljs lang="html">
7677
* <md-menu>
77-
* <md-button ng-click="$mdOpenMenu()" class="md-icon-button" aria-label="Open some menu">
78+
* <md-button ng-click="$mdOpenMenu($event)" class="md-icon-button" aria-label="Open some menu">
7879
* <md-icon md-menu-origin md-svg-icon="call:phone"></md-icon>
7980
* </md-button>
8081
* <md-menu-content>
@@ -117,7 +118,7 @@ angular.module('material.components.menu', [
117118
* @usage
118119
* <hljs lang="html">
119120
* <md-menu>
120-
* <md-button ng-click="$mdOpenMenu()" class="md-icon-button">
121+
* <md-button ng-click="$mdOpenMenu($event)" class="md-icon-button">
121122
* <md-icon md-svg-icon="call:phone"></md-icon>
122123
* </md-button>
123124
* <md-menu-content>
@@ -190,7 +191,9 @@ function MenuController($mdMenu, $attrs, $element, $scope) {
190191
};
191192

192193
// Uses the $mdMenu interim element service to open the menu contents
193-
this.open = function openMenu() {
194+
this.open = function openMenu(ev) {
195+
ev && ev.stopPropagation();
196+
194197
ctrl.isOpen = true;
195198
triggerElement.setAttribute('aria-expanded', 'true');
196199
$mdMenu.show({

src/components/menu/demoBasicUsage/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<h2 class="md-title">Simple dropdown menu</h2>
55
<p>Note that applying the <code>md-menu-origin</code> and <code>md-menu-align-target</code> attributes ensure that the menu elements align</p>
66
<md-menu>
7-
<md-button aria-label="Open phone interactions menu" class="md-icon-button" ng-click="$mdOpenMenu()">
7+
<md-button aria-label="Open phone interactions menu" class="md-icon-button" ng-click="$mdOpenMenu($event)">
88
<md-icon md-menu-origin md-svg-icon="call:phone"></md-icon>
99
</md-button>
1010
<md-menu-content width="4">

src/components/menu/demoMenuPositionModes/index.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ <h3 class="md-subhead">Target-Based Position Modes</h3>
77
<div layout="column" flex="33" flex-sm="100" layout-align="center center">
88
<p>Target Mode Positioning (default)</p>
99
<md-menu>
10-
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu()">
10+
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu($event)">
1111
<md-icon md-menu-origin md-svg-icon="call:business"></md-icon>
1212
</md-button>
1313
<md-menu-content width="6">
@@ -23,7 +23,7 @@ <h3 class="md-subhead">Target-Based Position Modes</h3>
2323
<div layout="column" flex-sm="100" flex="33" layout-align="center center">
2424
<p>Target mode with <code>md-offset</code></p>
2525
<md-menu md-offset="0 -5">
26-
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu()">
26+
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu($event)">
2727
<md-icon md-menu-origin md-svg-icon="call:ring-volume"></md-icon>
2828
</md-button>
2929
<md-menu-content width="4">
@@ -36,7 +36,7 @@ <h3 class="md-subhead">Target-Based Position Modes</h3>
3636
<div layout="column" flex-sm="100" flex="33" layout-align="center center">
3737
<p><code>md-position-mode="target-right target"</code></p>
3838
<md-menu md-position-mode="target-right target">
39-
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu()">
39+
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu($event)">
4040
<md-icon md-menu-origin md-svg-icon="call:portable-wifi-off"></md-icon>
4141
</md-button>
4242
<md-menu-content width="4">

src/components/menu/demoMenuWidth/index.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ <h2 class="md-title">Different Widths</h2>
66
<div layout="column" flex="33" flex-sm="100" layout-align="center center">
77
<p>Wide menu (<code>width=6</code>)</p>
88
<md-menu md-offset="0 -7">
9-
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu()">
9+
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu($event)">
1010
<md-icon md-menu-origin md-svg-icon="call:phone"></md-icon>
1111
</md-button>
1212
<md-menu-content width="6">
@@ -19,7 +19,7 @@ <h2 class="md-title">Different Widths</h2>
1919
<div layout="column" flex-sm="100" flex="33" layout-align="center center">
2020
<p>Medium menu (<code>width=4</code>)</p>
2121
<md-menu md-offset="0 -7">
22-
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu()">
22+
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu($event)">
2323
<md-icon md-menu-origin md-svg-icon="call:email"></md-icon>
2424
</md-button>
2525
<md-menu-content width="4">
@@ -32,7 +32,7 @@ <h2 class="md-title">Different Widths</h2>
3232
<div layout="column" flex="33" flex-sm="100" layout-align="center center">
3333
<p>Small menu (<code>width=2</code>)</p>
3434
<md-menu md-offset="0 -7">
35-
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu()">
35+
<md-button aria-label="Open demo menu" class="md-icon-button" ng-click="$mdOpenMenu($event)">
3636
<md-icon md-menu-origin md-svg-icon="call:chat"></md-icon>
3737
</md-button>
3838
<md-menu-content width="2">

src/components/menu/menu.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ describe('md-menu directive', function() {
1515
inject(function($compile, $rootScope) {
1616
menu = $compile([
1717
'<md-menu>',
18-
'<button ng-click="$mdOpenMenu()">Hello World</button>',
18+
'<button ng-click="$mdOpenMenu($event)">Hello World</button>',
1919
'<md-menu-content>',
2020
'<li><md-button ng-click="doSomething()"></md-button></li>',
2121
'</md-menu-content>'

0 commit comments

Comments
 (0)