vue 使用localstorage实现面包屑的操作


Posted in Javascript onNovember 16, 2020

mutation.js代码:

changeRoute(state, val) {
    let routeList = state.routeList;
    let isFind = false;
    let findeIdex = 0;

    //菜单栏和下拉的二级菜单
    if (val['type'] == 'header' || val['type'] == 'secondHeader')   {
      routeList.length = 0;
      //顶级菜单清除缓存
      localStorage.removeItem("routeList");
    }
    let routes = routeList;
    let localStorageList = localStorage.getItem('routeList');
    if (localStorageList) {
      //当前页刷新,使用缓存数据
      routes = JSON.parse(localStorageList as any);
    }
    //遍历是否有存入当前路由位置
    for (let i = 0; i < routes.length; i++) {
      isFind = routes[i]['name'] == val['name'];
      if (isFind) {
        findeIdex = i;
        break;
      }
    };
    if (isFind) {
      //有的话,清除当前路由以后的数据
      routes.splice(findeIdex + 1, routes.length - findeIdex - 1);
      //修改缓存
      localStorage.setItem('routeList', JSON.stringify(routes));
    } else {
      //存入全局变量
      routes.push(val);
      //设置缓存
      localStorage.setItem('routeList', JSON.stringify(routes));
    }
  }

页面使用:

//获取面包屑缓存
  let localStorageList1 = localStorage.getItem('routeList');
  //ts写法 as any
  this.routeList = JSON.parse(localStorageList1 as any) 
   ? JSON.parse(localStorageList1 as any)
   : { name: 'test', url: '/test' };

知识点:

1、localstorage

2、JSON.stringify()的作用是将 JavaScript 值转换为 JSON 字符串,JSON.parse()将JSON字符串转为一个对象

补充知识:vue+elementUI动态生成面包屑导航

vue 使用localstorage实现面包屑的操作

项目需要动态生成面包屑导航,并且首页可以点击.其余为路径显示

<el-menu :unique-opened="true" router :default-active="$route.path" @select="handleSelect">
    <div class="user-menu-box" v-for="menu in menus" :key="menu.id">
      <el-menu-item v-if="!menu.child" :index="menu.path">
        <icon :name="menu.icon" :w="20" :h="20"></icon>
        <span slot="title" v-text="menu.name"></span>
      </el-menu-item>
      <el-submenu v-if="menu.child" :index="menu.path">
        <template slot="title">
          <icon :name="menu.icon" :w="20" :h="20"></icon>
          <span slot="title" v-text="menu.name"></span>
        </template>
        <el-menu-item-group>
          <el-menu-item v-for="subMenu in menu.child" :key="subMenu.id" v-text="subMenu.name"
            :index="subMenu.path"></el-menu-item>
        </el-menu-item-group>
      </el-submenu>
    </div>
</el-menu>

上面的代码是elementUI组件的样式,根据项目需要做了修改,搬运的时候根据项目自己改改

export default {
  data () {
    return {
      activeMenu: '',
      indexBreadcrumbs: [],
      menus: [{
        id: '1',
        name: '门户管理',
        icon: 'menhuguanli',
        path: '#2',
        child: [{
          id: '1-1',
          name: '轮播图',
          path: '/backstage/protaManage/turns'
        }, {
          id: '1-2',
          name: '基础数据',
          path: '/backstage/protaManage/basis'
        }, {
          id: '1-3',
          name: '分类管理',
          path: '/backstage/protaManage/classify'
        }, {
          id: '1-4',
          name: '内容发布',
          path: '/backstage/protaManage/content'
        }]
      }, {
        id: '2',
        name: '我的云盘',
        icon: 'yunpan',
        path: '/backstage/yunManage'
      }, {
        id: '3',
        name: '管理菜单',
        icon: 'shezhi',
        path: '/backstage/menusManage'
      }, {
        id: '4',
        name: '编辑板块',
        icon: 'fabuzhongxin',
        path: '/backstage/editPlate'
      }]
    }
  },
  watch: {
    $route () {
      this.handChange()
    }
  },
  computed: {
    breadcrumbList () {
      let breadcrumbs = []
      let menuList = this.menus
      this.indexBreadcrumbs.map(item => {
        for (let i = 0; i < menuList.length; i++) {
          if (item === menuList[i].path) {
            breadcrumbs.push(menuList[i])
            if (menuList[i].child) {
              menuList = menuList[i].child
            }
            break;
          }
        }
      })
      return breadcrumbs
    }
  },
  methods: {
    handChange () {
      this.$emit('hand-change', this.breadcrumbList)
    },
    handleSelect (index, indexPath) {
      this.indexBreadcrumbs = indexPath
    }
  },
  created () {
    this.handChange()
  }
}

上面的代码是模拟的数据,调用elememtUI的组件导航菜单的中的@select方法,有两个参数,可以自行打印

vue 使用localstorage实现面包屑的操作

然后在computed中计算当前选中的是哪一部分,取到返回值,然后$emit传给父组件,

<el-breadcrumb separator-class="el-icon-arrow-right">
   <el-breadcrumb-item :to="{ path: '/backstage' }">首页</el-breadcrumb-item>
   <el-breadcrumb-item v-for="o in breadcrumbList" :key="o.id">{{o.name}}
   </el-breadcrumb-item>
 </el-breadcrumb>

父组件中取到子组件传过来的值后,直接渲染就行了

以上这篇vue 使用localstorage实现面包屑的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS查看对象功能代码
Apr 25 Javascript
javascript中的startWith和endWith的几种实现方法
May 07 Javascript
jquery选择器、属性设置用法经验总结
Sep 08 Javascript
Javascript基础教程之数据类型转换
Jan 18 Javascript
在HTML中插入JavaScript代码的示例
Jun 03 Javascript
浏览器兼容性问题大汇总
Dec 17 Javascript
Vue声明式渲染详解
May 17 Javascript
ES7中利用Await减少回调嵌套的方法详解
Nov 01 Javascript
用Vue写一个分页器的示例代码
Apr 22 Javascript
详解在React-Native中持久化redux数据
May 22 Javascript
浅谈react路由传参的几种方式
Mar 23 Javascript
详解TypeScript的基础类型
Feb 18 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
Nov 16 #Javascript
Vue中使用JsonView来展示Json树的实例代码
Nov 16 #Javascript
Vue 数据绑定的原理分析
Nov 16 #Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
Nov 16 #Javascript
Vue指令实现OutClick的示例
Nov 16 #Javascript
浅谈vue在html中出现{{}}的原因及解决方式
Nov 16 #Javascript
vue组件中传值EventBus的使用及注意事项说明
Nov 16 #Javascript
You might like
php-accelerator网站加速PHP缓冲的方法
2008/07/30 PHP
PHP-redis中文文档介绍
2013/02/07 PHP
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
php批量删除数据库下指定前缀的表以prefix_为例
2014/08/24 PHP
php无限级分类实现方法分析
2016/10/19 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
JS限制Textarea文本域字符个数的具体实现
2013/08/02 Javascript
利用JQuery制作符合Web标准的QQ弹出消息
2014/01/14 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
Angular2 PrimeNG分页模块学习
2017/01/14 Javascript
JavaScript实现类似淘宝的购物车效果
2017/03/16 Javascript
Flask中获取小程序Request数据的两种方法
2017/05/12 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
[05:53]敌法师的金色冠名ID"BurNIng",是传说,是荣耀
2020/07/11 DOTA
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
Python实现大数据收集至excel的思路详解
2020/01/03 Python
使用Tkinter制作信息提示框
2020/02/18 Python
Python通过两个dataframe用for循环求笛卡尔积
2020/04/29 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
实例讲解CSS3中Transform的perspective属性的用法
2016/04/22 HTML / CSS
new修饰符是起什么作用
2015/06/28 面试题
服务行业个人求职的自我评价
2013/12/12 职场文书
给同事的道歉信
2014/01/11 职场文书
社区党员先进事迹
2014/01/22 职场文书
体育馆的标语
2014/06/24 职场文书
社区清明节活动总结
2014/07/04 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
2015年学校教育教学工作总结
2015/04/22 职场文书
师范生小学见习总结
2015/06/23 职场文书
提档介绍信范文
2015/10/22 职场文书