vue-router + element-plus实现多层级路由的动态展示

需求

前端的路由往往是分层级的,所有的路由组合起来就像是一棵树,为了方便说明,我们举一个简单的例子,如下图所示:
vue-router + element-plus实现多层级路由的动态展示_第1张图片

上图中除去根节点共有六个路由,每个叶子节点路由对应一个页面,每个父节点路由对应一个分组。
在开发单页面应用时,我们往往会需要一个导航栏或者称之为菜单栏,方便用户点击以实现路由间的跳转。基于element-plus组件库,我们希望这些路由组成如下图的形式的侧边菜单栏,当我们点击叶子节点路由时,我们会跳转到相应的路由页面。
vue-router + element-plus实现多层级路由的动态展示_第2张图片

我自己做了一个基于vue3+typescript的网站,网站中使用本博客中讲述的方式实现了一个侧边路由导航栏,这是网站预览地址和gitee仓库地址。(ps:此网站并不是一个demo,而是具有完整前后端交互和一定功能的网站,需要注册并登陆才能进入主页面并使用,注册很简单,只需要设置用户名、账号、密码即可。也可登陆测试账号: admin,密码: 123456。 但如果有超过五个人同时登陆这个测试账号,那么后者会把前者挤下去,当然这种概率很小罢了。这里附上后端仓库地址,我是用go写的,大概总共二十多个接口吧)

静态展示方法

静态展示就是依据路由的层级和分组,使用ui组件形成相应的分层结构,然后直接把路由信息写到组件里,形成一个静态的菜单栏,就像element-plus的官网示例–Menu侧栏菜单那样。然后再为每个el-menu-item组件绑定点击事件,被点击后跳转到相应的路由,这样一个静态的路由菜单栏就写好了。

这种写法没有什么需要特别注意的地方,具体细节不再展示。

但这种写法有几个很明显的缺点:

  1. 过于繁琐,一个大型的单页面应用可能有几十个路由,这些路由会分为很多分组和很多层级,我们要手动地去录入这些分组和层级,这非常麻烦。
  2. 过于臃肿,几十个路由的展示可能需要一两百行甚至更多的