现象说明:先看官方文档设置 active-name 可以选中指定的菜单,设置 open-names 可以展开指定的子菜单。
加了open-names时
二者都有
使用变量绑定:没有出现问题
<template>
<Menu :open-names="openName" :active-name="activeName">
<Submenu name="1">
<template slot="title">
<Icon type="ios-analytics" />
Navigation One
</template>
<MenuGroup title="Item 1">
<MenuItem name="1-1">Option 1</MenuItem>
<MenuItem name="1-2">Option 2</MenuItem>
</MenuGroup>
<MenuGroup title="Item 2">
<MenuItem name="1-3">Option 3</MenuItem>
<MenuItem name="1-4">Option 4</MenuItem>
</MenuGroup>
</Submenu>
<Submenu name="2">
<template slot="title">
<Icon type="ios-filing" />
Navigation Two
</template>
<MenuItem name="2-1">Option 5</MenuItem>
<MenuItem name="2-2">Option 6</MenuItem>
<Submenu name="3">
<template slot="title">Submenu</template>
<MenuItem name="3-1">Option 7</MenuItem>
<MenuItem name="3-2">Option 8</MenuItem>
</Submenu>
</Submenu>
<Submenu name="4">
<template slot="title">
<Icon type="ios-cog" />
Navigation Three
</template>
<MenuItem name="4-1">Option 9</MenuItem>
<MenuItem name="4-2">Option 10</MenuItem>
<MenuItem name="4-3">Option 11</MenuItem>
<MenuItem name="4-4">Option 12</MenuItem>
</Submenu>
</Menu>
</template>
<script>
export default {
data(){
return{
openName: '2',
activeName: ['2-2'],
}
}
}
</script>
运行图
但是在改变:open-names的数据时却不会生效
但是在created修改openName时也没有问题:
但是在动态变换的时候就会出现问题
查了很久资料发现是iview组件的bug,其解决方法是:
用Menu的updateopened方法:手动更新展开的子目录,注意要在 $nextTick 里调用。对openNames添加watch:
watch: {
openNames() {
this.$nextTick(() => {
this.$refs.side_menu.updateOpened();
this.$refs.side_menu.updateActiveName();
})
}
},