我在用 iView 的 Menu 组件做侧边栏导航,动态设置了 active-name,但点击菜单项后页面跳转了,高亮却没跟着变。控制台也没报错,就是不生效。
我试过在 mounted 里手动设置 this.activeName = this.$route.name,也监听了路由变化去更新,但都没用。是不是哪里写错了?
data() {
return {
activeName: 'home'
}
},
watch: {
'$route'(to) {
this.activeName = to.name
}
}
iView 的高亮逻辑是对比
active-name和每个 MenuItem 的name,如果 MenuItem 没写 name,那肯定高亮不了:如果确认 MenuItem 都有 name,那问题大概率出在路由上。你打印一下
this.activeName和 MenuItem 的 name,看看值是否完全一致(注意大小写、空格)。另外,如果你用了 keep-alive,组件不会重新 mounted,watch 也不一定会触发。改成下面这种方式更稳妥:
加上
immediate: true会在组件创建时就执行一次,不用等路由变化。还有一种情况:如果你的菜单是父组件,子路由跳转时父组件不会重新创建,watch 可能不触发。这种情况可以在路由守卫里更新:
你先检查下 MenuItem 的 name 属性写了没,这个是最容易踩的坑。