最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue + Elementui實現(xiàn)多標簽頁共存的方法

 更新時間:2019年06月12日 14:41:47   作者:關(guān)鑫賢  
這篇文章主要介紹了Vue + Elementui實現(xiàn)多標簽頁共存的方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下

這個主題,早在一年前就已經(jīng)創(chuàng)建,也寫了一些內(nèi)容,礙于在應用上體驗始終不夠完美,一直只存著草稿。

經(jīng)過多個平臺實踐,多次迭代,一些功能加了又減了,最后還是回歸了最精簡的版本,已適用于大部分的場景,若有需要,可自行擴展。

關(guān)鍵邏輯

  • 使用 keep-alive 來緩存各標簽頁
  • 通過 vue-router 的 beforeEach 方法來更新標簽信息
  • 通過 vuex 來保存標簽信息
  • 通過 vuex 來使關(guān)閉頁不被緩存

核心代碼

定義 vuex 的跨頁變量(store/index.js)

import Vuex from 'vuex'
 Vue.use(Vuex)
 export default new Vuex.Store({
  state: {
   worktab: {
    list: [
     {
      name: 'my',
      tabname: '主頁',
      path: '/page/my'
     }
    ],
    current: {
     name: 'my',
     tabname: '主頁',
     path: '/page/my'
    }
   },
   closingPage: ''
  },
  mutations: {
   worktabRemove (state, p) {
    // 關(guān)閉標簽
    let ind = state.worktab.list.findIndex(s => s.name === p)
    if (ind > -1) {
     // 清理 keep alive - start
     state.closingPage = state.worktab.list[ind].name
     // 清理 keep alive - end
     state.worktab.list.splice(ind, 1)
    }
    if (p === state.worktab.current.name) {
     // 是當前頁,返回上一頁
     router.back()
    }
   },
   worktabRoute (state, p) {
    let ind = state.worktab.list.findIndex(s => s.name === p.to.name)
    if (ind > -1) {
     // 標簽已存在
     state.worktab.current = state.worktab.list[ind]
    } else {
     // 標簽不存在,現(xiàn)在新建
     state.worktab.list.push(p.to)
     state.worktab.current = p.to
    }
    state.closingPage = ''
   }
  },
  actions: {
   worktabRemove ({commit}, p) {
    commit('worktabRemove', p)
   },
   worktabRoute ({commit}, p) {
    commit('worktabRoute', p)
   }
  },
  strict: debug
 })

定義 worktab 標簽欄組件,在主容器引用

<template>
  <div class="cp-worktab">
   <el-tabs v-model="activeTab" type="card" @tab-remove="removeTab" @tab-click="clickTab">
    <el-tab-pane
     v-for="t in worktabs"
     :key="t.name"
     :label="t.tabname"
     :name="t.name"
     :closable="t.name !== 'my'"
    >
    </el-tab-pane>
   </el-tabs>
  </div>
 </template>
 <script>
 export default {
  created () {
   // 進來不是主頁時等list加載后再更新一次current
   setTimeout(() => {
    this.activeTab = this.$store.state.worktab.current.name
   }, 500)
  },
  watch: {
   '$store.state.worktab.current' (tab) {
    this.activeTab = tab.name
   }
  },
  computed: {
   worktabs () {
    return this.$store.state.worktab.list
   }
  },
  data () {
   return {
    activeTab: 'name'
   }
  },
  methods: {
   clickTab (tab) {
    this.$router.push(this.worktabs[1 * tab.index].path)
   },
   removeTab (name) {
    this.$store.dispatch('worktabRemove', name)
   }
  }
 }
 </script>

路由控制通過beforeEach來更新標簽信息

import Vue from 'vue'
 import VueRouter from 'vue-router'
 import store from '@/store'
 import Page from '../components/console/Page.vue'
 import My from '../components/console/My.vue'
 Vue.use(VueRouter)
 // 關(guān)聯(lián)路由與組件
 const routes = [
  {
   name: 'root',
   path: '/'
  },
  {
   path: '/page',
   component: Page,
   children: [
    {
     name: 'my',
     path: 'my',
     component: My,
     meta: {
      tabname: '個人主頁'
     }
    }
   ]
  }
 ]
 // 創(chuàng)建路由器
 const router = new VueRouter({
  routes
 })
 router.beforeEach((to, from, next) => {
  next()
  store.dispatch('worktabRoute', {
   to: {
    name: to.name ? to.name : '',
    tabname: (to.meta && to.meta.tabname) ? to.meta.tabname : '',
    path: to.path
   },
   from: {
    name: from.name ? from.name : '',
    tabname: (from.meta && from.meta.tabname) ? from.meta.tabname : '',
    path: from.path
   }
  })
  return
 })
 export default router

主容器通過 closingPage 變量來及時清理關(guān)閉頁面的緩存

<template>
  <div>
   <cp-worktab></cp-worktab>
   <div class="cp-content">
    <keep-alive :exclude="closingPage">
     <router-view></router-view>
    </keep-alive>
   </div>
  </div>
 </template>
 <script>
 import Worktab from '../module/Worktab'
 export default {
  components: {
   cpWorktab: Worktab
  },
  data () {
   return {}
  },
  computed: {
   closingPage () {
    return this.$store.state.closingPage
   }
  }
 }
 </script>

總結(jié)

以上所述是小編給大家介紹的Vue + Elementui實現(xiàn)多標簽頁共存的方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

相關(guān)文章

  • vue3使用video.js播放m3u8格式視頻的操作指南

    vue3使用video.js播放m3u8格式視頻的操作指南

    有時候我們需要播放 m3u8 格式的視頻,或者實現(xiàn)視頻播放器更多定制化需求,HTML 的 video 元素無法實現(xiàn)這些需求,這時候可以考慮使用 Video.js,本文給大家介紹了vue3使用video.js播放m3u8格式視頻的操作指南,需要的朋友可以參考下
    2024-07-07
  • Vue子父組件之間傳值的三種方法示例

    Vue子父組件之間傳值的三種方法示例

    Vue的組件化給前端開發(fā)帶來極大的便利,下面這篇文章主要給大家介紹了關(guān)于Vue子父組件之間傳值的三種方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • vue插件tab選項卡使用小結(jié)

    vue插件tab選項卡使用小結(jié)

    這篇文章主要為大家詳細介紹了vue插件tab選項卡的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 前端Vue?select下拉框使用以及監(jiān)聽事件詳解

    前端Vue?select下拉框使用以及監(jiān)聽事件詳解

    由于前端項目使用的是Vue.js和bootstrap整合開發(fā),中間用到了select下拉框,這篇文章主要給大家介紹了關(guān)于前端Vue?select下拉框使用以及監(jiān)聽事件的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • Vue3.0版本強勢升級點特性詳解

    Vue3.0版本強勢升級點特性詳解

    這篇文章主要介紹了Vue3.0版本強勢升級點特性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2022-06-06
  • Vue手機號正則匹配姓名加密展示功能的實現(xiàn)

    Vue手機號正則匹配姓名加密展示功能的實現(xiàn)

    這篇文章主要介紹了Vue手機號正則匹配,姓名加密展示,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • vue中的input框點擊后不聚焦問題

    vue中的input框點擊后不聚焦問題

    這篇文章主要介紹了vue中的input框點擊后不聚焦問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue循環(huán)el-button實現(xiàn)點擊哪個按鈕,那個按鈕就變色

    vue循環(huán)el-button實現(xiàn)點擊哪個按鈕,那個按鈕就變色

    這篇文章主要介紹了vue循環(huán)el-button實現(xiàn)點擊哪個按鈕,那個按鈕就變色問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue前端獲取不同客戶端mac地址最詳細步驟(避免踩坑)

    vue前端獲取不同客戶端mac地址最詳細步驟(避免踩坑)

    在開發(fā)過程中,綁定賬號和電腦的功能可以通過獲取電腦的MAC地址實現(xiàn),下面這篇文章主要介紹了vue前端獲取不同客戶端mac地址的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • vue如何動態(tài)修改meta的title

    vue如何動態(tài)修改meta的title

    這篇文章主要介紹了vue如何動態(tài)修改meta的title,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論

咸宁市| 宜川县| 永丰县| 明溪县| 盖州市| 西充县| 科尔| 威海市| 河北省| 天柱县| 阿坝| 海安县| 磐安县| 锡林郭勒盟| 宾阳县| 台东市| 松阳县| 望都县| 泾川县| 乐业县| 中宁县| 九台市| 和政县| 和平区| 三门峡市| 满城县| 丘北县| 玉溪市| 梁山县| 温州市| 车险| 贵溪市| 乐亭县| 汉川市| 连云港市| 德格县| 通河县| 古蔺县| 张家口市| 盐边县| 元朗区|