欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

elementui實(shí)現(xiàn)標(biāo)簽頁與菜單欄聯(lián)動(dòng)的示例代碼

 更新時(shí)間:2024年06月25日 09:43:57   作者:前端小白小白白  
多級(jí)聯(lián)動(dòng)是一種常見的交互方式,本文主要介紹了elementui實(shí)現(xiàn)標(biāo)簽頁與菜單欄聯(lián)動(dòng)的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下

技術(shù):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已經(jīng)存在,不添加新的tabs
      if (state.tabList.some(item => item.path === tab.path)) return
      state.tabList.push(tab)
    }
  },
  getters: {
    // 獲取tbsList
    getTabs: (state) => {
      return state.tabList
    }
  },
  actions: {
  },
  modules: {
  }
})

功能點(diǎn):
1:當(dāng)前活躍的tab就是當(dāng)前路由的path
2: 頁面刷新,tabList數(shù)據(jù)丟失,則在刷新之前使用sessionStorage進(jìn)行存儲(chǔ)
3:刪除tab的時(shí)候,活躍的tab變?yōu)楸粍h除的前一個(gè)或者下一個(gè),刪除后重新設(shè)置活躍的tab 和tabList
4:監(jiān)控路由變化,路由變化了,活躍的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 {
      // 當(dāng)前活躍的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: {
    // 設(shè)置活躍的tab
    setActiveTab() {
      this.activeTab = this.$route.path
    },
    // 添加tab
    addTab() {
      const { path, meta } = this.$route
      const tab = {
        path,
        title: meta.title,
      }
      store.commit('addTab', tab)
    },
    // 點(diǎn)擊tab
    clickBtn(tab) {
      const { name } = tab
      this.$router.push({ path: name })
    },
    // 刪除tab
    removeTab(target) {
      // 當(dāng)前激活的tab
      let active = this.activeTab
      const tabs = this.tabList
      // 只有一個(gè)標(biāo)簽頁的時(shí)候不允許刪除
      if (tabs.length === 1) return
      if (active === target) {
        tabs.forEach((tab, index) => {
          // 如果刪除的就是當(dāng)前活躍的tab,就把活躍的tab變成上一個(gè)或下一個(gè)
          const nextTab = tab[index + 1] || tab[index - 1]
          if (nextTab) {
            active = nextTab.path
          }
        })
      }
      // 重新設(shè)置當(dāng)前激活的選項(xiàng)卡和 選項(xiàng)卡列表
      this.activeTab = active
      store.state.tabList = tabs.filter((tab) => tab.path !== target)
    },
    // 解決刷新數(shù)據(jù)丟失問題
    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>




補(bǔ)充:路由

{
    path: '/layout',
    component: () => import('../layout/index.vue'),
    children: [
      {
        path: 'lay1',
        component: () => import('../views/lay/Lay1.vue'),
        meta: {
          title:'選項(xiàng)1'
        }
      },
      {
        path: 'lay2',
        component: () => import('../views/lay/Lay2.vue'),
        meta: {
          title:'選項(xiàng)2'
        }
        
      },
      {
        path: 'lay3',
        component: () => import('../views/lay/Lay3.vue'),
        meta: {
          title:'選項(xiàng)3'
        }
      },
      {
        path: 'lay4',
        component: () => import('../views/lay/Lay4.vue'),
        meta: {
          title:'選項(xiàng)4'
        }
      },
    }

到此這篇關(guān)于elementui實(shí)現(xiàn)標(biāo)簽頁與菜單欄聯(lián)動(dòng)的示例代碼的文章就介紹到這了,更多相關(guān)element 標(biāo)簽頁與菜單欄聯(lián)動(dòng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • vue中的config目錄下index.js解讀

    vue中的config目錄下index.js解讀

    這篇文章主要介紹了vue中的config目錄下index.js解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • vue項(xiàng)目持久化存儲(chǔ)數(shù)據(jù)的實(shí)現(xiàn)代碼

    vue項(xiàng)目持久化存儲(chǔ)數(shù)據(jù)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了vue項(xiàng)目持久化存儲(chǔ)數(shù)據(jù)的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10
  • Vue2.x安裝并使用SCSS的全部過程

    Vue2.x安裝并使用SCSS的全部過程

    這篇文章主要給大家介紹了關(guān)于Vue2.x安裝并使用SCSS的相關(guān)資料,以及如何在vue 2.x中全局引用公共scss文件,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • vue項(xiàng)目中如何通過cdn引入資源并配置詳解

    vue項(xiàng)目中如何通過cdn引入資源并配置詳解

    生產(chǎn)環(huán)境中將項(xiàng)目依賴的一些第三方包替換成通過cdn方式外部加載,而不是打包到 vender,對(duì)于提升應(yīng)用的加載、響應(yīng)速度很有意義,下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中如何通過cdn引入資源并配置的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • vue自定義表格列的實(shí)現(xiàn)過程記錄

    vue自定義表格列的實(shí)現(xiàn)過程記錄

    這篇文章主要給大家介紹了關(guān)于vue自定義表格列的相關(guān)資料,表格組件在開發(fā)中經(jīng)常會(huì)用到,文章通過示例代碼介紹的也很詳細(xì),需要的朋友可以參考下
    2021-06-06
  • Vue實(shí)現(xiàn)小購物車功能

    Vue實(shí)現(xiàn)小購物車功能

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)小購物車功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 詳解Vue 全局引入bass.scss 處理方案

    詳解Vue 全局引入bass.scss 處理方案

    本篇文章主要介紹了詳解Vue 全局引入bass.scss 處理方案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Vue2.x通用條件搜索組件的封裝及應(yīng)用詳解

    Vue2.x通用條件搜索組件的封裝及應(yīng)用詳解

    這篇文章主要為大家詳細(xì)介紹了Vue2.x通用條件搜索組件的封裝及應(yīng)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • vue3動(dòng)態(tài)路由刷新出現(xiàn)空白頁的原因與最優(yōu)解

    vue3動(dòng)態(tài)路由刷新出現(xiàn)空白頁的原因與最優(yōu)解

    頁面刷新白屏其實(shí)是因?yàn)関uex引起的,由于刷新頁面vuex數(shù)據(jù)會(huì)丟失,這篇文章主要給大家介紹了關(guān)于vue3動(dòng)態(tài)路由刷新出現(xiàn)空白頁的原因與最優(yōu)解的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • vue中使用v-model完成組件間的通信

    vue中使用v-model完成組件間的通信

    vue中有一個(gè)很神奇的東西叫v-model,它可以完成我們的需求。,本文重點(diǎn)給大家介紹vue中使用v-model完成組件間的通信,需要的朋友可以參考下
    2019-08-08

最新評(píng)論