From 01b5cf53b29d265e1584f6c3de634ef020e42ac7 Mon Sep 17 00:00:00 2001 From: baiyaaaaa Date: Tue, 11 Oct 2016 15:06:58 +0800 Subject: [PATCH] fix menu auto collapse after router change --- packages/menu/src/menu.vue | 44 ++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/packages/menu/src/menu.vue b/packages/menu/src/menu.vue index f96809e67..42c70f4cc 100644 --- a/packages/menu/src/menu.vue +++ b/packages/menu/src/menu.vue @@ -27,12 +27,7 @@ type: String, default: '' }, - defaultOpeneds: { - type: Array, - default() { - return []; - } - }, + defaultOpeneds: Array, theme: { type: String, default: 'light' @@ -43,7 +38,7 @@ data() { return { activeIndex: this.defaultActive, - openedMenus: this.defaultOpeneds.slice(0), + openedMenus: (this.defaultOpeneds || []).slice(0), menuItems: {}, submenus: {} }; @@ -55,14 +50,18 @@ this.handleSelect(value, indexPath); }, - defaultOpeneds(value) { - this.openedMenus = value; + defaultOpeneds: { + deep: true, + handler(value) { + this.openedMenus = value; + } } }, methods: { openMenu(index, indexPath) { let openedMenus = this.openedMenus; if (openedMenus.indexOf(index) !== -1) return; + // 将不在该菜单路径下的其余菜单收起 if (this.uniqueOpened) { this.openedMenus = openedMenus.filter(index => { return indexPath.indexOf(index) !== -1; @@ -92,29 +91,28 @@ this.broadcast('submenu', 'item-select', [index, indexPath]); this.openedMenus = []; } else { + this.openActiveItemMenus(); + } + + if (this.router && route) { + this.$router.push(route); + } + }, + openActiveItemMenus() { + let index = this.activeIndex; + if (index && this.mode === 'vertical') { + let indexPath = this.menuItems[index].indexPath; + // 展开该菜单项的路径上所有子菜单 indexPath.forEach(index => { let submenu = this.submenus[index]; submenu && this.openMenu(index, submenu.indexPath); }); } - - if (this.router && route) { - this.$router.push(route); - } } }, mounted() { - let index = this.activeIndex; - if (index && this.mode === 'vertical') { - let indexPath = this.menuItems[index].indexPath; - - // 展开该菜单项的路径上所有子菜单 - indexPath.forEach(index => { - let submenu = this.submenus[index]; - submenu && this.openMenu(index, submenu.indexPath); - }); - } + this.openActiveItemMenus(); } };