Skip to content

Commit ea8d140

Browse files
committed
fix: 修复在 IE,safari 等较老浏览器菜单闪动问题 #634 #593
1 parent 3d221c5 commit ea8d140

File tree

2 files changed

+25
-28
lines changed

2 files changed

+25
-28
lines changed

src/components/Menu/menu.js

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import Menu from 'ant-design-vue/es/menu'
22
import Icon from 'ant-design-vue/es/icon'
33

4-
const { Item, SubMenu } = Menu
5-
64
export 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
}

vue.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ const vueConfig = {
7676

7777
// 'primary-color': '#F5222D',
7878
// 'link-color': '#F5222D',
79-
// 'border-radius-base': '4px'
79+
'border-radius-base': '2px'
8080
},
8181
// DO NOT REMOVE THIS LINE
8282
javascriptEnabled: true

0 commit comments

Comments
 (0)