11import Menu from 'ant-design-vue/es/menu'
22import Icon from 'ant-design-vue/es/icon'
33
4- const { Item, SubMenu } = Menu
5-
64export default {
75 name : 'SMenu' ,
86 props : {
@@ -72,6 +70,10 @@ export default {
7270 this . openKeys = latestOpenKey ? [ latestOpenKey ] : [ ]
7371 }
7472 } ,
73+ onSelect ( { item, key, selectedKeys } ) {
74+ this . selectedKeys = selectedKeys
75+ this . $emit ( 'select' , { item, key, selectedKeys } )
76+ } ,
7577 updateMenu ( ) {
7678 const routes = this . $route . matched . concat ( )
7779 const { hidden } = this . $route . meta
@@ -100,7 +102,7 @@ export default {
100102 } ,
101103 renderMenuItem ( menu ) {
102104 const target = menu . meta . target || null
103- const tag = target && 'a' || 'router-link'
105+ const CustomTag = target && 'a' || 'router-link'
104106 const props = { to : { name : menu . name } }
105107 const attrs = { href : menu . path , target : menu . meta . target }
106108
@@ -114,12 +116,12 @@ export default {
114116 }
115117
116118 return (
117- < Item { ...{ key : menu . path } } >
118- < tag { ...{ props, attrs } } >
119+ < Menu . Item { ...{ key : menu . path } } >
120+ < CustomTag { ...{ props, attrs } } >
119121 { this . renderIcon ( menu . meta . icon ) }
120122 < span > { menu . meta . title } </ span >
121- </ tag >
122- </ Item >
123+ </ CustomTag >
124+ </ Menu . Item >
123125 )
124126 } ,
125127 renderSubMenu ( menu ) {
@@ -128,13 +130,13 @@ export default {
128130 menu . children . forEach ( item => itemArr . push ( this . renderItem ( item ) ) )
129131 }
130132 return (
131- < SubMenu { ...{ key : menu . path } } >
133+ < Menu . SubMenu { ...{ key : menu . path } } >
132134 < span slot = "title" >
133135 { this . renderIcon ( menu . meta . icon ) }
134136 < span > { menu . meta . title } </ span >
135137 </ span >
136138 { itemArr }
137- </ SubMenu >
139+ </ Menu . SubMenu >
138140 )
139141 } ,
140142 renderIcon ( icon ) {
@@ -150,31 +152,26 @@ export default {
150152 } ,
151153
152154 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
163161 } ,
164- openChange : this . onOpenChange
162+ on : {
163+ openChange : this . onOpenChange ,
164+ select : this . onSelect
165+ }
165166 }
166167
167- const menuTree = menu . map ( item => {
168+ const menuTree = this . menu . map ( item => {
168169 if ( item . hidden ) {
169170 return null
170171 }
171172 return this . renderItem ( item )
172173 } )
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 > )
179176 }
180177}
0 commit comments