1
1
import Menu from 'ant-design-vue/es/menu'
2
2
import Icon from 'ant-design-vue/es/icon'
3
3
4
- const { Item, SubMenu } = Menu
5
-
6
4
export default {
7
5
name : 'SMenu' ,
8
6
props : {
@@ -72,6 +70,10 @@ export default {
72
70
this . openKeys = latestOpenKey ? [ latestOpenKey ] : [ ]
73
71
}
74
72
} ,
73
+ onSelect ( { item, key, selectedKeys } ) {
74
+ this . selectedKeys = selectedKeys
75
+ this . $emit ( 'select' , { item, key, selectedKeys } )
76
+ } ,
75
77
updateMenu ( ) {
76
78
const routes = this . $route . matched . concat ( )
77
79
const { hidden } = this . $route . meta
@@ -100,7 +102,7 @@ export default {
100
102
} ,
101
103
renderMenuItem ( menu ) {
102
104
const target = menu . meta . target || null
103
- const tag = target && 'a' || 'router-link'
105
+ const CustomTag = target && 'a' || 'router-link'
104
106
const props = { to : { name : menu . name } }
105
107
const attrs = { href : menu . path , target : menu . meta . target }
106
108
@@ -114,12 +116,12 @@ export default {
114
116
}
115
117
116
118
return (
117
- < Item { ...{ key : menu . path } } >
118
- < tag { ...{ props, attrs } } >
119
+ < Menu . Item { ...{ key : menu . path } } >
120
+ < CustomTag { ...{ props, attrs } } >
119
121
{ this . renderIcon ( menu . meta . icon ) }
120
122
< span > { menu . meta . title } </ span >
121
- </ tag >
122
- </ Item >
123
+ </ CustomTag >
124
+ </ Menu . Item >
123
125
)
124
126
} ,
125
127
renderSubMenu ( menu ) {
@@ -128,13 +130,13 @@ export default {
128
130
menu . children . forEach ( item => itemArr . push ( this . renderItem ( item ) ) )
129
131
}
130
132
return (
131
- < SubMenu { ...{ key : menu . path } } >
133
+ < Menu . SubMenu { ...{ key : menu . path } } >
132
134
< span slot = "title" >
133
135
{ this . renderIcon ( menu . meta . icon ) }
134
136
< span > { menu . meta . title } </ span >
135
137
</ span >
136
138
{ itemArr }
137
- </ SubMenu >
139
+ </ Menu . SubMenu >
138
140
)
139
141
} ,
140
142
renderIcon ( icon ) {
@@ -150,31 +152,26 @@ export default {
150
152
} ,
151
153
152
154
render ( ) {
153
- const { mode, theme, menu } = this
154
- const props = {
155
- mode : mode ,
156
- theme : theme ,
157
- openKeys : this . openKeys
158
- }
159
- const on = {
160
- select : obj => {
161
- this . selectedKeys = obj . selectedKeys
162
- this . $emit ( 'select' , obj )
155
+ const dynamicProps = {
156
+ props : {
157
+ mode : this . mode ,
158
+ theme : this . theme ,
159
+ openKeys : this . openKeys ,
160
+ selectedKeys : this . selectedKeys
163
161
} ,
164
- openChange : this . onOpenChange
162
+ on : {
163
+ openChange : this . onOpenChange ,
164
+ select : this . onSelect
165
+ }
165
166
}
166
167
167
- const menuTree = menu . map ( item => {
168
+ const menuTree = this . menu . map ( item => {
168
169
if ( item . hidden ) {
169
170
return null
170
171
}
171
172
return this . renderItem ( item )
172
173
} )
173
- // {...{ props, on: on }}
174
- return (
175
- < Menu vModel = { this . selectedKeys } { ...{ props, on : on } } >
176
- { menuTree }
177
- </ Menu >
178
- )
174
+
175
+ return ( < Menu { ...dynamicProps } > { menuTree } </ Menu > )
179
176
}
180
177
}
0 commit comments