2.0.0-rc.10
Win7/Chrome 56
2.2.2
<Menu ref="menu" theme="dark" width="auto" accordion @on-select="select" :active-name="active" :open-names="openNames">
动态更新open-names无效,即:
:open-names="openNames",更新openNames时,不更新菜单视图的展开关闭的状态。
然后我通过调用 updateOpened 方法来更新菜单视图的状态,出现一个问题,就是如果是开启手风琴模式(accordion=true),会出现之前展开的现在不关闭。
这里建议修改updateOpened里的方法,判断是开启accordion的,不在openNames数组内的就关闭展开
updateOpened () {
const items = findComponentsDownward(this, 'Submenu');
if (items.length) {
items.forEach(item => {
if (this.openNames.indexOf(item.name) > -1) item.opened = true;
});
}
}
为
updateOpened () {
const items = findComponentsDownward(this, 'Submenu');
if (items.length) {
items.forEach(item => {
if (this.openNames.indexOf(item.name) > -1) {
item.opened = true
} else if(this.accordion) {
item.opened = false
}
});
}
}
开启了路由缓存
<keep-alive>
<router-view></router-view>
</keep-alive>
Menu 组件不是每次都离开都销毁
不像官网文档,每次Menu组件都create、destroyed
watch : {
openNames () {
this.$refs.menu.$children.forEach((item) => {
item.opened = false
})
this.$nextTick(() => {
this.$refs.menu.updateOpened()
})
}
}
这个问题很容易复现,<Menu>放到router-view标签外面就可以了,否则Menu每次都刷新可以正常显示opened状态。
/src/components/menu/menu.vue 中
watch: {
openNames () {
this.$emit('on-open-change', this.openNames);
},
on-open-change事件, 但是没有处理这个事件在<Menu>上 @on-open-change并在响应方法中 this.nextTick 中调用menu.updateOpened
在mounted方法中作如下修改,on-open-change时调用updateOpened
mounted () {
this.updateActiveName();
this.updateOpened();
this.$on('on-open-change', (names) => {
this.updateOpened();
});
我也遇到了这个问题,每次调用点击子菜单就会导致父菜单关闭,现在我的临时解决办法是:
this.$refs.sideMenu.$children.forEach((item) => {
this.openNames.forEach(e=>{
if(e==item.name){
item.opened = true;
}
})
})
Most helpful comment
我也遇到了这个问题,每次调用点击子菜单就会导致父菜单关闭,现在我的临时解决办法是: