当前位置: 代码网 > it编程>编程语言>Javascript > elementui实现标签页与菜单栏联动的示例代码

elementui实现标签页与菜单栏联动的示例代码

2024年07月04日 Javascript 我要评论
技术:vue2+vuex+elementuistore/index.js文件里import vue from 'vue'import vuex from 'vuex'vue.use(vuex)expo

技术: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 标签页与菜单栏联动内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com