elementui实现标签页与菜单栏联动的示例代码
技术:vue2+vuex+elementui
store/index.js文件里
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ state: { tabList:[] }, mutations: { addTab: (state, tab) => { // 如果tab已经存在,不添加新的tabs if (state.tabList.some(item => item.path === tab.path)) return state.tabList.push(tab) } }, getters: { // 获取tbsList getTabs: (state) => { return state.tabList } }, actions: { }, modules: { } })
功能点:
1:当前活跃的tab就是当前路由的path
2: 页面刷新,tabList数据丢失,则在刷新之前使用sessionStorage进行存储
3:删除tab的时候,活跃的tab变为被删除的前一个或者下一个,删除后重新设置活跃的tab 和tabList
4:监控路由变化,路由变化了,活跃的tab 和tabList 也要随之变化
<template> <el-tabs v-model="activeTab" closable @tab-remove="removeTab" @tab-click="clickBtn" > <el-tab-pane :key="index" v-for="(item, index) in tabList" :label="item.title" :name="item.path" > {{ item.content }} </el-tab-pane> </el-tabs> </template> <script> import store from '../../store' export default { name: '', data() { return { // 当前活跃的tabs activeTab: '', } }, components: {}, computed: { tabList() { return store.getters['getTabs'] }, }, watch: { $route: function () { this.setActiveTab() this.addTab() }, }, created() {}, mounted() { this.beforeRefresh() this.setActiveTab() this.addTab() }, methods: { // 设置活跃的tab setActiveTab() { this.activeTab = this.$route.path }, // 添加tab addTab() { const { path, meta } = this.$route const tab = { path, title: meta.title, } store.commit('addTab', tab) }, // 点击tab clickBtn(tab) { const { name } = tab this.$router.push({ path: name }) }, // 删除tab removeTab(target) { // 当前激活的tab let active = this.activeTab const tabs = this.tabList // 只有一个标签页的时候不允许删除 if (tabs.length === 1) return if (active === target) { tabs.forEach((tab, index) => { // 如果删除的就是当前活跃的tab,就把活跃的tab变成上一个或下一个 const nextTab = tab[index + 1] || tab[index - 1] if (nextTab) { active = nextTab.path } }) } // 重新设置当前激活的选项卡和 选项卡列表 this.activeTab = active store.state.tabList = tabs.filter((tab) => tab.path !== target) }, // 解决刷新数据丢失问题 beforeRefresh() { window.addEventListener('beforeunload', () => { sessionStorage.setItem('tabsView', JSON.stringify(this.tabList)) }) let tabSession = sessionStorage.getItem('tabsView') if (tabSession) { let oldTabs = JSON.parse(tabSession) if (oldTabs.length > 0) { store.state.tabList = oldTabs } } }, }, } </script>
补充:路由
{ path: '/layout', component: () => import('../layout/index.vue'), children: [ { path: 'lay1', component: () => import('../views/lay/Lay1.vue'), meta: { title:'选项1' } }, { path: 'lay2', component: () => import('../views/lay/Lay2.vue'), meta: { title:'选项2' } }, { path: 'lay3', component: () => import('../views/lay/Lay3.vue'), meta: { title:'选项3' } }, { path: 'lay4', component: () => import('../views/lay/Lay4.vue'), meta: { title:'选项4' } }, }
到此这篇关于elementui实现标签页与菜单栏联动的示例代码的文章就介绍到这了,更多相关element 标签页与菜单栏联动内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
vue-cli 环境变量 process.env的使用及说明
这篇文章主要介绍了vue-cli 环境变量 process.env的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-12-12vue 关闭浏览器窗口的时候,清空localStorage的数据示例
今天小编就为大家分享一篇vue 关闭浏览器窗口的时候,清空localStorage的数据示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2019-11-11vue中使用elementui实现树组件tree右键增删改功能
这篇文章主要介绍了vue中使用elementui实现对树组件tree右键增删改功能,右击节点可进行增删改,对节点数据进行模糊查询功能,本文给大家分享了完整代码,需要的朋友可以参考下2022-08-08
最新评论