面包屑实现

背景:面包屑根据菜单内容显示不同内容。首页永远存在,后面的活动管理及多级菜单的面包屑展示。

实现原理:

通过this.$route.matched获取所有匹配路由,将处理首页外的其他路由设置到一个数组中,再通过数组循环方式显示

通过路由中的meta属性设置title用于显示面包屑;

监听路由,获取路由栈this.$route.matched

html 复制代码
    <el-breadcrumb separator="/">
      <el-breadcrumb-item v-for="(item,index) of levelList" :key="index">
      {{item.meta.title}}
      </el-breadcrumb-item>
    </el-breadcrumb>
javascript 复制代码
created() {
    this.getBreadcrumb();
  },
  watch: {
    $route(route) {
      if (route.path.startsWith("/redirect/")) {
        return;
      }
      this.getBreadcrumb();
    }
  },
  methods: {
    getBreadcrumb() {
      let matched = this.$route.matched.filter(
        item => item.meta && item.meta.title
      );
      const first = matched[0];
      // 判断不是首页才concat
      if (!this.isDashboard(first)) {
        matched = [{ path: "/home", meta: { title: "首页" } }].concat(matched);
      }

      this.levelList = matched.filter(
        item => item.meta && item.meta.title && item.meta.breadcrumb !== false
      );
    },
    isDashboard(route) {
      const name = route && route.meta.title;
      if (!name) {
        return false;
      }
      return name.trim().toLocaleLowerCase() === "首页".toLocaleLowerCase();
    },
}
相关推荐
热忱11285 小时前
elementUI Table组件实现表头吸顶效果
前端·vue.js·elementui
白嫖叫上我2 天前
Element修改表格结构样式集合(后续实时更新)
前端·vue.js·elementui
夏天想3 天前
element-plus中的table为什么相同的数据并没有合并成一个
javascript·vue.js·elementui
蓝胖子的多啦A梦3 天前
Vue+Element-ui 中 使用el-table 设置表格单元格 (el -table-column) 保留空格和换行
前端·vue.js·elementui
十三月❀4 天前
当设置dialog中有el-table时,并设置el-table区域的滚动,看到el-table中多了一条横线
javascript·vue.js·elementui
小华同学ai4 天前
GCPAAS/DashBoard:完全免费的仪表盘设计,基于Vue+ElementUI+G2Plot+Echarts,开源代码,简单易用!还在等什么呢
vue.js·elementui·github·echarts
有蝉4 天前
elementUI项目中,只弹一个【token过期提示】信息框的处理
前端·javascript·elementui
南北极之间4 天前
前端新手必看:10 大 UI 组件库全面解析,快速搭建高质量 Web 应用」 「从零开始:Vue 和 React 最受欢迎的 UI 组件库入门指南」 「超实用!PC 端和移动端 UI 组件库推荐与实战
前端·vue.js·ui·elementui·element·anti-design-vue·ui组件库
m0_672449604 天前
各种获取数据接口
java·大数据·前端·vue.js·elementui
影子信息6 天前
element select 绑定一个对象{}
javascript·vue.js·elementui