Element: NavMenu在设置router='true'的时候应该和vue-router的<router-link>表现一致

Created on 22 Dec 2016  ·  13Comments  ·  Source: ElemeFE/element

虽然现在可以通过设置 <el-menu :router="true"> 这种方式和vue-router进行整合,但是最重要的一个功能并没有实现。

使用<router-link>当url改变的时候,会自动给匹配的<router-link>增加activeClass,但是<menu-item>缺乏这个功能。而且由于active这个样式必须应用与<menu-item>,所以也无法通过<slot>方式在里面写<router-link>

Most helpful comment

@languanghao :default-active="$router.path"

All 13 comments

这样写表示让mene具有导航功能,然后你的index属性就是要跳转的页面。比如我要跳转/press页,index="/press",你这样写为什么不起作用,是因为menu这个组件中的router属性没有true这个值,直接写router不用赋值。我也遇到过这个问题。当时还写了issue。你好好看看文档。router是没有true这个值的

@yuanyuanshen menu确实有个prop router: 是否使用 vue-router 的模式,启用该模式会在激活导航时以 index 作为 path 进行路由跳转。只有当这个值设置为truemenu-itemroute才会有效。

另外,我这里最大的问题是,使用router-link,每次导航的时候,都会自动匹配当前哪个 <router-link>active,但是现在这个menu只有点击导航才行,如果手动改变url地址,并不会自动选中匹配的menu-item

@yuanyuanshen 我刚测试了下你的 element-demo

比如访问:http://127.0.0.1:1314/#/mainPage/yuecai
左侧导航栏的“五滋粤菜”并没有被选中

这个问题确实有。但是可以使用其他方式实现,我说下我的想法,就是你可以获取你当前的访问地址。然后把/press这个放在aa变量中。export default return aa,然后把menu的active绑定aa变量。:active=“aa”。这样,当你单独访问,不试用路由跳转的时候,对应的menu应该可以active

@yuanyuanshen 我现在也遇到了这个问题,按照文档来写,导航里index也写了路径,但是点击导航能够实现url变化页面组件不会刷新,刷新浏览器才会实现渲染

临时解决办法:https://gist.github.com/languanghao/5f74ca361f22192ba774941a69fd275b

但是我还是觉得,既然vue-router已经有官方实现了,能够整合<router-link>是最优方案

@languanghao 我知道。我没有做你说的那个功能,只是提供了一种实现的想法

@bkidy 你的还和我们的问题是反着的

@languanghao 你github为什么链接不到啊。给我看些解决方案呗。我项目中也有这个问题呢。

@languanghao :default-active="$router.path"

@yuanyuanshen 可以连接到啊,我用了科学上网工具

@baiyaaaaa 这个确实是一种办法,但是只有当url和index完全匹配的时候才有用,类似与<router-link exact>,默认的情况下,<router-link>的匹配模式是inclusive match (全包含匹配)

我有个想法,当启用router的时候,menu内部 watch $route,然后也跟<router-link>一样,提供一个匹配模式的props

@baiyaaaaa 感谢你的思路,不过是 :default-active="$route.path" 啦,$route才对

Was this page helpful?
0 / 5 - 0 ratings