diff --git a/src/components/menu/menu.vue b/src/components/menu/menu.vue
index ec747f7b..4b6f61d3 100644
--- a/src/components/menu/menu.vue
+++ b/src/components/menu/menu.vue
@@ -24,7 +24,10 @@
type: [String, Number]
},
openKeys: {
- type: Array
+ type: Array,
+ default () {
+ return []
+ }
},
accordion: {
type: Boolean,
@@ -81,6 +84,14 @@
item.active = item.key === this.activeKey;
}
})
+ },
+ updateOpenKeys (key) {
+ const index = this.openKeys.indexOf(key);
+ if (index > -1) {
+ this.openKeys.splice(index, 1);
+ } else {
+ this.openKeys.push(key);
+ }
}
},
compiled () {
@@ -92,6 +103,11 @@
this.updateActiveKey();
this.$emit('on-select', key);
}
+ },
+ watch: {
+ openKeys () {
+ this.$emit('on-open-change', this.openKeys);
+ }
}
}
\ No newline at end of file
diff --git a/src/components/menu/submenu.vue b/src/components/menu/submenu.vue
index 5a47e3b7..cdeedb82 100644
--- a/src/components/menu/submenu.vue
+++ b/src/components/menu/submenu.vue
@@ -58,6 +58,7 @@
clearTimeout(this.timeout);
this.timeout = setTimeout(() => {
+ this.$parent.updateOpenKeys(this.key);
this.opened = true;
}, 250);
},
@@ -67,6 +68,7 @@
clearTimeout(this.timeout);
this.timeout = setTimeout(() => {
+ this.$parent.updateOpenKeys(this.key);
this.opened = false;
}, 150);
},
@@ -80,6 +82,7 @@
});
}
this.opened = !opened;
+ this.$parent.updateOpenKeys(this.key);
}
},
watch: {
diff --git a/test/routers/menu.vue b/test/routers/menu.vue
index f9986fbf..ba5353b5 100644
--- a/test/routers/menu.vue
+++ b/test/routers/menu.vue
@@ -19,7 +19,7 @@
-