File tree Expand file tree Collapse file tree 5 files changed +93
-22
lines changed Expand file tree Collapse file tree 5 files changed +93
-22
lines changed Original file line number Diff line number Diff line change 11<example src="./examples/Directions.vue " />
22<example src="./examples/Sizes.vue " />
33<example src="./examples/MenuAlignments.vue " />
4+ <example src="./examples/AutoClose.vue " />
45<example src="./examples/MultipleContent.vue " />
56
67<template >
3334 <note-block >The max-width of a menu is 280px.</note-block >
3435 </div >
3536
37+ <div class =" page-container-section" >
38+ <h2 >AutoClose</h2 >
39+
40+ <p ><code >md-menu</code > can be auto closed on click or select:</p >
41+ <code-example title =" Auto close menu on events" :component =" examples['auto-close']" />
42+ </div >
43+
3644 <div class =" page-container-section" >
3745 <h2 >Rich Content and Icon Alignment</h2 >
3846
7179 description: ' Used to show/hide a menu programatically.' ,
7280 defaults: ' false'
7381 },
82+ {
83+ name: ' md-close-on-click' ,
84+ type: ' Boolean' ,
85+ description: ' When this options is true, the menu will be closed after any click event.' ,
86+ defaults: ' false'
87+ },
7488 {
7589 name: ' md-close-on-select' ,
7690 type: ' Boolean' ,
Original file line number Diff line number Diff line change 1+ <template >
2+ <div >
3+ <div >
4+ <md-checkbox :value =" true" v-model =" closeOnClick" >closeOnClick</md-checkbox >
5+ <md-checkbox :value =" true" v-model =" closeOnSelect" >closeOnSelect</md-checkbox >
6+ </div >
7+ <div >
8+ <md-menu md-direction =" bottom-end" :mdCloseOnClick =" closeOnClick" :mdCloseOnSelect =" closeOnSelect" >
9+ <md-button md-menu-trigger >Bottom End</md-button >
10+
11+ <md-menu-content >
12+ <md-menu-item disabled @click =" data = 'click disabled'" >Disabled</md-menu-item >
13+ <md-menu-item @click =" data = 'click 1'" >Click Event 1</md-menu-item >
14+ <md-menu-item @click =" data = 'click 2'" >Click Event 2</md-menu-item >
15+ <md-menu-item >Plain text</md-menu-item >
16+ </md-menu-content >
17+ </md-menu >
18+ </div >
19+ <div >{{data}}</div >
20+ </div >
21+ </template >
22+
23+ <script >
24+ export default {
25+ name: ' AutoClose' ,
26+
27+ data () {
28+ return {
29+ data: ' ' ,
30+ closeOnClick: false ,
31+ closeOnSelect: true
32+ }
33+ }
34+ }
35+ </script >
36+
37+ <style lang="scss" scoped>
38+ .md-menu {
39+ margin : 24px ;
40+ }
41+ </style >
Original file line number Diff line number Diff line change 3030 type: Boolean ,
3131 default: true
3232 },
33+ mdCloseOnClick: {
34+ type: Boolean ,
35+ default: false
36+ },
3337 mdSize: {
3438 type: String ,
3539 default: ' small' ,
5660 fullWidth: this .mdFullWidth ,
5761 dense: this .mdDense ,
5862 closeOnSelect: this .mdCloseOnSelect ,
63+ closeOnClick: this .mdCloseOnClick ,
5964 bodyClickObserver: null ,
6065 windowResizeObserver: null ,
6166 $el: this .$el
102107 } else {
103108 this .$emit (' md-opened' )
104109 }
110+ },
111+ mdCloseOnSelect () {
112+ this .MdMenu .closeOnSelect = this .mdCloseOnSelect
113+ },
114+ mdCloseOnClick () {
115+ this .MdMenu .closeOnClick = this .mdCloseOnClick
105116 }
106117 },
107118 methods: {
Original file line number Diff line number Diff line change 199199 $event .stopPropagation ()
200200 let isMdMenu = this .MdMenu .$el ? this .MdMenu .$el .contains ($event .target ) : false
201201 let isMenuContentEl = this .$refs .menu ? this .$refs .menu .contains ($event .target ) : false
202- if (! this .$el .contains ($event .target ) && ! isMdMenu && ! isMenuContentEl) {
202+ let onBackdropExpectMenu = ! this .$el .contains ($event .target ) && ! isMenuContentEl
203+ if (! isMdMenu && (this .MdMenu .closeOnClick || onBackdropExpectMenu)) {
203204 this .MdMenu .active = false
204205 this .MdMenu .bodyClickObserver .destroy ()
205206 this .MdMenu .windowResizeObserver .destroy ()
Original file line number Diff line number Diff line change 1616 },
1717 inject: [' MdMenu' ],
1818 data : () => ({
19- listeners: {},
2019 highlighted: false
2120 }),
2221 computed: {
2322 itemClasses () {
2423 return {
2524 ' md-highlight' : this .highlighted
2625 }
26+ },
27+ listeners () {
28+ if (this .disabled ) {
29+ return {}
30+ }
31+
32+ if (! this .MdMenu .closeOnSelect ) {
33+ return this .$listeners
34+ }
35+
36+ let listeners = {}
37+ let listenerNames = Object .keys (this .$listeners )
38+
39+ listenerNames .forEach (listener => {
40+ if (MdInteractionEvents .includes (listener)) {
41+ listeners[listener] = $event => {
42+ this .$listeners [listener]($event)
43+ this .closeMenu ()
44+ }
45+ } else {
46+ listeners[listener] = this .$listeners [listener]
47+ }
48+ })
49+
50+ return listeners
2751 }
2852 },
2953 methods: {
4165 }
4266 }
4367 },
44- created () {
45- if (this .MdMenu .closeOnSelect ) {
46- let listenerNames = Object .keys (this .$listeners )
47-
48- listenerNames .forEach (listener => {
49- if (MdInteractionEvents .includes (listener)) {
50- this .listeners [listener] = $event => {
51- if (! this .disabled ) {
52- this .$listeners [listener]($event)
53- this .closeMenu ()
54- }
55- }
56- } else {
57- this .listeners [listener] = this .$listeners [listener]
58- }
59- })
60- } else {
61- this .listeners = this .$listeners
62- }
63- },
6468 mounted () {
6569 if (this .$el .children && this .$el .children [0 ]) {
6670 let listItem = this .$el .children [0 ]
You can’t perform that action at this time.
0 commit comments