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 1
1
<example src="./examples/Directions.vue " />
2
2
<example src="./examples/Sizes.vue " />
3
3
<example src="./examples/MenuAlignments.vue " />
4
+ <example src="./examples/AutoClose.vue " />
4
5
<example src="./examples/MultipleContent.vue " />
5
6
6
7
<template >
33
34
<note-block >The max-width of a menu is 280px.</note-block >
34
35
</div >
35
36
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
+
36
44
<div class =" page-container-section" >
37
45
<h2 >Rich Content and Icon Alignment</h2 >
38
46
71
79
description: ' Used to show/hide a menu programatically.' ,
72
80
defaults: ' false'
73
81
},
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
+ },
74
88
{
75
89
name: ' md-close-on-select' ,
76
90
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 30
30
type: Boolean ,
31
31
default: true
32
32
},
33
+ mdCloseOnClick: {
34
+ type: Boolean ,
35
+ default: false
36
+ },
33
37
mdSize: {
34
38
type: String ,
35
39
default: ' small' ,
56
60
fullWidth: this .mdFullWidth ,
57
61
dense: this .mdDense ,
58
62
closeOnSelect: this .mdCloseOnSelect ,
63
+ closeOnClick: this .mdCloseOnClick ,
59
64
bodyClickObserver: null ,
60
65
windowResizeObserver: null ,
61
66
$el: this .$el
102
107
} else {
103
108
this .$emit (' md-opened' )
104
109
}
110
+ },
111
+ mdCloseOnSelect () {
112
+ this .MdMenu .closeOnSelect = this .mdCloseOnSelect
113
+ },
114
+ mdCloseOnClick () {
115
+ this .MdMenu .closeOnClick = this .mdCloseOnClick
105
116
}
106
117
},
107
118
methods: {
Original file line number Diff line number Diff line change 199
199
$event .stopPropagation ()
200
200
let isMdMenu = this .MdMenu .$el ? this .MdMenu .$el .contains ($event .target ) : false
201
201
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)) {
203
204
this .MdMenu .active = false
204
205
this .MdMenu .bodyClickObserver .destroy ()
205
206
this .MdMenu .windowResizeObserver .destroy ()
Original file line number Diff line number Diff line change 16
16
},
17
17
inject: [' MdMenu' ],
18
18
data : () => ({
19
- listeners: {},
20
19
highlighted: false
21
20
}),
22
21
computed: {
23
22
itemClasses () {
24
23
return {
25
24
' md-highlight' : this .highlighted
26
25
}
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
27
51
}
28
52
},
29
53
methods: {
41
65
}
42
66
}
43
67
},
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
- },
64
68
mounted () {
65
69
if (this .$el .children && this .$el .children [0 ]) {
66
70
let listItem = this .$el .children [0 ]
You can’t perform that action at this time.
0 commit comments