element实现动态路由+面包屑

要掌握:localStorage,组件封装
​​​​请添加图片描述

emm,第一次上传视频转gif的图片,效果不咋好。。。
视频转gif 的软件连接 http://www.zxt2007.com/downloads.html
找到一个可以截取部分视频制作gif图的软件https://soft.onlinedo.cn/gif/

  1. 在 components 下新建一个 curmbs 文件夹,并在该文件夹下新建一个 index.vue 文件。
  2. router.js 中的配置,添加一个 meta对象
    在这里插入图片描述
  3. 代码
<template>
  <div class="crumbs">
    <!-- 面包屑 -->
    <el-card class="box-card">
      <el-breadcrumb separator="/">
        <el-breadcrumb-item v-for="(level,index)  in this.levelList" :key="index" :to="level.path">
          {
   {
   level.name}}
        </el-breadcrumb-item>
      </el-breadcrumb>
    </el-card>

  </div>
</template>

<script>
export default {
   
  name : "crumbs",
  data() {
   
    return {
   
        levelList: []
    }
  },
  watch: {
   
    $route(to,from) {
   
      console.log(to,from)
      // 思路:判断meta中breadNumber为几,就把它放在第几个
      // 注意:存放到localStorage中的数据格式最好统一,我在这里把它统一成了数组的格式
      // levelList最终的格式要为:[{name:"xx",path:"xx",breadNum:"xx"}]
      this.getBreadcrumb()
    }
  },
  methods:{
   
    getBreadcrumb() {
    
      // 1.获取当前的name,path,breadNumber
      var newName = this.$route.name;
      var newPath = this.$route.fullPath;
      var newBreadNum = this.$route.meta.breadNumber;   

      // 2.获取前一页存下的name,path,breadNumber
      var oldName = JSON.parse(window.localStorage.getItem("oldName"));
      var oldPath = JSON.parse(window.localStorage.getItem("oldPath"));
      var oldBreadNum = JSON.parse(window.localStorage.getItem("oldBreadNum"));
      var routerInfo =  JSON.parse(window.localStorage.getItem("routerInfo")) || [];  
      
      this.levelList = routerInfo;     
      
      // 3.判断是否是第一层,即初始位置,如果是第一层,分两种情况
      if(this.$route.meta.breadNumber === 1){
   
      // 3.1 localStorage有值,那么this.levelList不是空值,说明是由上一个主路由进来的,需要清空之前localStorage的值,并且重新赋值给levelList
        if(this.levelList.length != 0 ){
   
          localStorage.removeItem("oldName")
VueElement UI的后台管理系统中,通常使用面包屑来指示当前所处的页面。一般情况下,我们会使用路由信息中的meta.title作为面包屑的标题。但是当遇到编辑和新增公用同一个页面的情况时,我们需要动态修改标题。有一种方法是在路由守卫中判断是否有id,来动态修改meta中的title。但是这种方法不太好,因为其他人在维护代码时可能不知道这样的设置,导致可维护性较差。另外,还需要让显示面包屑的组件支持动态修改meta.title,比较麻烦。 解决这个问题的一个巧妙方法是通过配置两个路由,指向同一个页面。如下所示: ``` { path: 'save', name: 'teamCreate', meta: { title: '新增成员', hideInMenu: true }, component: () => import('@/views/team/save.vue') }, { path: 'save/:id', name: 'teamEdit', meta: { title: '编辑成员', hideInMenu: true }, component: () => import('@/views/team/save.vue') } ``` 通过这种方式,我们可以在不同的路由中设置不同的meta.title,从而实现动态修改面包屑的标题。 另外,如果需要在客户列表点击跳转至客户的订单页面,并以被点击客户的信息直接查询,但希望面包屑的标题与普通打开订单页面的标题保持一致,可以使用类似的方法。在order/index.vue中可以通过this.$route.params.customerName来获取被点击客户的信息,并设置面包屑的标题。但是需要注意的是,导航栏的结果可能要在下一次打开同一个页面才会渲染出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值