虽然现在可以通过设置 <el-menu :router="true">
这种方式和vue-router进行整合,但是最重要的一个功能并没有实现。
使用<router-link>
当url改变的时候,会自动给匹配的<router-link>
增加activeClass,但是<menu-item>
缺乏这个功能。而且由于active
这个样式必须应用与<menu-item>
,所以也无法通过<slot>
方式在里面写<router-link>
这样写
@yuanyuanshen menu
确实有个prop router
: 是否使用 vue-router 的模式,启用该模式会在激活导航时以 index 作为 path 进行路由跳转
。只有当这个值设置为true
,menu-item
的route
才会有效。
另外,我这里最大的问题是,使用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才对
Most helpful comment
@languanghao
:default-active="$router.path"