ElemeFE / element

A Vue.js 2.0 UI Toolkit for Web
https://element.eleme.io/
MIT License
54.1k stars 14.64k forks source link

NavMenu 中使用路由导航,刷新后导航栏指向default-active设置的选项,但是router-view并不渲染路由指向的页面 #2932

Closed xuxiaoxiao312 closed 7 years ago

xuxiaoxiao312 commented 7 years ago

代码如下 <el-menu :default-active="sideMenuItems[0].items[0].name" class="el-menu-vertical-demo" router @open="handleOpen" @close="handleClose" theme="dark" unique-opened >

langgo commented 7 years ago

我也碰见了这个问题。

既然 NavMenu 中有 router 这个选项。应该在刷新页面之后,保持原来的激活状态。

langgo commented 7 years ago

上面的问题,大致可以用下面解决。 但是还是不能支持路由的 别名。

根据路由获取default-active,类似 :default-active="$route.path"

langgo commented 7 years ago

而且 NavMenu 的 index 不支持 vue-router 的命名方式 {name: "User"}

总结:

如果 NavMenu 支持路由(采用vue-router),就应该实现比较完善的功能。 如果不想耦合在一起的话,不应该提供router 选项。

感谢

PanJiaChen commented 7 years ago

image image 这样就可以刷新页面之后,保持原来的激活状态。

langgo commented 7 years ago

感谢 @PanJiaChen

但是有个问题::default-active="$route.path" 和上面的方法有什么不同?

是可以在不刷新页面的路由变动时,动态调整激活状态?

另外问一下,NavMenu 是不支持路由别名吗?

刚才试了一下,:default-active="$route.path" 和上面的方法。显示效果一致

f2ecjb commented 7 years ago
data() {
            return {
                activeIndex: '',
            };
        },
        beforeMount: function () {
            if(this.$route.name == 'index'){
                this.activeIndex = 'feeds'
            }else{
                this.activeIndex = this.$route.name
            }
        },
baiyaaaaa commented 7 years ago

既然没什么问题就先关掉了,另外 @langgo 你说的很好,2.0 已经有点想把 router 的功能去掉了。我认为menu的激活与展开,应该是跟路由无关,而只跟你的 default-activedefault-openeds 有关。还是建议不要太过于依赖 router 这个功能🌚