当前位置: 首页 > article >正文

【通过el-breadcrumb实现动态面包屑】

在这里插入图片描述
一:通过el-breadcrumb实现动态面包屑,通过路由的path决定展示的导航;
这是引用的./sidebarConfig的js文件(侧导航栏的路由path);

export default {
  menuList: [
    {
      index: '/home',
      title: 'home.modelManagement',
      icon: 'icon-shouye'
    },
    {
      index: '/computingPower',
      title: 'home.microservices',
      icon: 'icon-jichengkaifa'
    },
    {
      index: 'modelTraining',
      title: 'DI.distributedModeling',
      icon: 'icon-moxingshu',
      subs: [
        {
          index: '/experiment',
          title: 'home.experimentList'
        },
        {
          index: '/expExeRecord',
          title: 'home.expExecutRecord'
        },
        {
          index: '/jobExeRecord',
          title: 'home.taskExecutRecord'
        }
      ]
    },
  ]
}

二:完整代码
这是 labelArr
在这里插入图片描述

<template>
  <el-row class="breadcrumb">
    <el-col :span="21">
      <el-breadcrumb separator="/">
        <el-breadcrumb-item v-for="(item,index) of labelArr"
                            :key="index"
                            :to="item.path?item.path:''">{{$t(item.title)}}</el-breadcrumb-item>
      </el-breadcrumb>
    </el-col>
    <el-col :span="3"
            class="operate-btn">
      <slot></slot>
    </el-col>
  </el-row>
</template>
<script>
import { Breadcrumb, BreadcrumbItem } from 'element-ui'
import sidebarConfig from './sidebarConfig'
export default {
  components: {
    ElBreadcrumb: Breadcrumb,
    ElBreadcrumbItem: BreadcrumbItem
  },
  data () {
    return {
      labelArr: []
    }
  },
  mounted () {
    const breadcrumbArr = window.sessionStorage.getItem('breadcrumbArr')
    console.log(breadcrumbArr);  //[{"title":"home.modelManagement"},{"title":"home.modelManagement","path":"/home"},{"title":"modelList.versionList","path":"/model/versionList/418"}]
    
    if (breadcrumbArr) {
      this.labelArr = window.JSON.parse(breadcrumbArr)
    }
    this.getPath()
  },
  methods: {
    getPath () {
      const path = this.$route.path
      console.log(path);  //   /model/versionList/418
      
      // 如果this.labelArr最后一个对象path等于this.$route.path则是页面更新
      if (this.labelArr[this.labelArr.length - 1] === path) {
        return
      }
      let pathArr = path.split('/').splice(1)
      let startIndex = 1
      console.log(pathArr);
      
      
      if (pathArr[0] === 'manage' || pathArr[0] === 'model') {
        startIndex = 2
      }
      if (pathArr.length - 1 >= startIndex) {
        let existIndex = -1
        for (let i = startIndex - 1; i < this.labelArr.length; i++) {
          if (this.labelArr[i].path === path) {
            existIndex = i
            return
          }
        }
        if (existIndex === -1) {
          this.labelArr.push({ title: this.$route.meta.title, path: path })
        } else {
          this.labelArr = this.labelArr.splice(0, existIndex + 1)
        }
        this.setBreadcrumbArr(this.labelArr)
      } else {
        this.levelMenu(pathArr, path)
      }
    },
    levelMenu (pathArr, path) {
      const groupName = this.$route.meta.groupName
      let labelArr = []
      if (groupName) {
        for (let menu of sidebarConfig.menuList) {
          if (menu.subs && groupName === menu.index) {
            labelArr.push({ title: menu.title })
            for (let subMenu of menu.subs) {
              if (subMenu.index === path) {
                labelArr.push({ title: subMenu.title, path: path })
                break
              }
            }
          }
        }
      } else {
        for (let menu of sidebarConfig.menuList) {
          if (menu.index === path) {
            labelArr.push({
              title: menu.title
            })
            labelArr.push({
              title: menu.title,
              path: menu.index
            })
          }
        }
      }
      this.labelArr = labelArr
      this.setBreadcrumbArr(labelArr)
    },
    setBreadcrumbArr (labelArr) {
      window.sessionStorage.setItem('breadcrumbArr', window.JSON.stringify(labelArr))
    }
  }
}
</script>
<style lang="scss" >
// 面包屑
.breadcrumb {
  .el-breadcrumb__item {
    height: 40px;
    line-height: 40px;
    &:last-child {
      .el-breadcrumb__inner {
        font-weight: 600;
      }
    }
  }
  .el-breadcrumb__inner a,
  .el-breadcrumb__inner.is-link {
    font-weight: 400;
  }
  .operate-btn {
    height: 40px;
    line-height: 40px;
    text-align: right;
  }
}
</style>


http://www.kler.cn/a/348828.html

相关文章:

  • (1)发布自己的python包
  • 如何在PHP中强制转换类型?
  • 熟练使用Spring Boot、Spring Cloud Alibaba微服务开发框架,并深入理解其原理 学习要求
  • Spring Cloud Alibaba 技术栈与概要说明
  • COD深度学习模型设计中,可以将各个模块归为这四大类。
  • VMware设置虚拟机与物理机在同一网段
  • 链表Set_LinkList(建立)
  • UE5 圆周运动、贝塞尔曲线运动、贝塞尔曲线点
  • 查看系统服务
  • SpringBoot驱动的飘香水果购物网站:设计与实现
  • 单片机原理与技术
  • SpringBoot驱动的智能健康推荐系统
  • HTML 技巧
  • 线上问题复盘模板
  • 物联网年度“盛宴”!华普微受邀参加Silicon Labs Works With大会
  • OpenReview API | 高效检索会议论文
  • 快速理解http的get和post
  • 百果园利润暴跌收入下滑:加盟店减少88家,销售费用却大幅增长
  • MySQL事务、存储引擎
  • wifi配置文件在linux哪个目录上