html代码:(用的是el-tab组件)
1 <el-tabs v-model="activeIndex" type="border-card" @tab-click="tabClick" @tab-remove="tabRemove">
2 <el-tab-pane :closable="item.name == '首页'?false:true" :key="item.name" v-for="(item) in options" :label="item.name" :name="item.route">
3 </el-tab-pane>
4 </el-tabs>
methods:
1 // tab 切换时, 动态的切换路由
2 tabClick(tab) {
3 this.$router.push({
4 path: this.activeIndex
5 }); // 路由跳转
6 },
7
8
9 tabRemove(targetName) { 10 this.$store.dispatch('menu/deleteTabs', targetName); 11 // 还同时需要处理一种情况当需要移除的页面为当前激活的页面时, 将上一个 tab 页作为激活 tab
12 if (this.activeIndex === targetName) { 13 // 设置当前激活的路由
14 if (this.options && this.options.length >= 1) { 15 this.$store.dispatch('menu/setActiveIndex', this.options\[this.options.length - 1\].route); 16 this.$router.push({ 17 path: this.activeIndex 18 }); 19 }else{ 20 this.$router.push('/home') 21 } 22 } 23 }
数据是存放在vuex中的:
1 computed: {
2 options: {
3 get () {return this.$store.state.menu.options},
4 set (val) {this.$store.dispatch('menu/addTabs', val)}
5 },
6 // 动态设置及获取当前激活的 tab 页
7 activeIndex: {
8 get() {
9 return this.$store.state.menu.activeIndex; 10 }, 11 set(val) { 12 this.$store.dispatch('menu/setActiveIndex', val); 13 } 14 } 15 },
mounted:
1 mounted() {
2 let options = JSON.parse(window.localStorage.getItem('menuOptions'))
3 this.activeIndex = localStorage.getItem('menuIndex')
4 if(!options) {
5 options = [] 6 this.$router.push('/home')
7 this.$store.commit('menu/SET_ACTIVEI_NDEX', options.route)
8 // this.$store.dispatch('menu/setActiveIndex', options.route)
9 }else { 10 this.$store.commit('menu/SET_OPTIONS', options) 11 } 12 //this.$store.dispatch('menu/setActiveIndex', options.route) 13 //this.$store.commit('menu/SET_OPTIONS', options) 14 // 设置当前激活的路由
15 if (options && options.length >= 1) { 16 for(var i = 0; i < options.length; i++){ 17 if(options[i].route == this.activeIndex){ 18 this.$store.dispatch('menu/setActiveIndex', options[i].route) 19
20 } 21 } 22 }else{ 23 this.$router.push('/home') 24 } 25 },
store/menu.js
1 const state = { 2 options: [{ route: '/home', name: '首页' }], 3 activeIndex: '/home'
4 }
5 const mutations = { 6 SET_OPTIONS: (state, data) => { 7 state.options = data 8 },
9 // 添加 tabs
10 ADD_TABS: (state, data) => { 11 //state.options.findIndex(m => m.name === data.name) < 0 && state.options.push(data)
12 state.options.push(data); 13 localStorage.setItem("menuOptions", JSON.stringify(state.options)) 14 }, 15 // 删除 tabs
16 DELETE_TABS: (state, route) => { 17 let index = 0; 18 for (let option of state.options) { 19 if (option.route === route) { 20 break; 21 } 22 index++; 23 } 24 state.options.splice(index, 1); 25 localStorage.setItem("menuOptions", JSON.stringify(state.options)) 26 }, 27 // 设置当前激活的 tab,route
28 SET_ACTIVEI_NDEX: (state, index) => { 29 state.activeIndex = index; 30 localStorage.setItem("menuIndex", state.activeIndex) 31 }, 32 } 33 const actions = { 34 addTabs({ commit }, info) { 35 commit('ADD_TABS', info) 36 }, 37 deleteTabs({ commit }, info) { 38 commit('DELETE_TABS', info) 39 }, 40 setActiveIndex({ commit }, info) { 41 commit('SET_ACTIVEI_NDEX', info) 42 }, 43 } 44
45
46 export default { 47 namespaced: true, 48 state, 49 mutations, 50 actions 51 }
over!
原网址: 访问
创建于: 2021-08-06 13:33:11
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论