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

詳解vue-template-admin三級(jí)路由無(wú)法緩存的解決方案

 更新時(shí)間:2020年03月10日 14:56:48   作者:Cyanxxx  
這篇文章主要介紹了vue-template-admin三級(jí)路由無(wú)法緩存的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1. 為什么三級(jí)會(huì)緩存不了

在src/layout/AppMain組件:


keep-alive的組件依賴(lài)cachedViews,cachedViews是store中的一個(gè)狀態(tài),cachedViews的邏輯在src/layout/TagView


當(dāng)路由變更時(shí)就會(huì)調(diào)用addViewTags,addViewTag會(huì)根據(jù)匹配的路由name屬性進(jìn)行緩存。而用到三級(jí)路由的時(shí)候,拿到name只能時(shí)第三級(jí)路由的name,二級(jí)路由組件的名字會(huì)丟失,keep-alive就不會(huì)進(jìn)行緩存。
知道原因之后,第一個(gè)想法就是把二級(jí)路由的name也加上去就好了。要實(shí)現(xiàn)這個(gè)也很簡(jiǎn)單,只需要獲取到matched屬性就可以拿到匹配到的路由組件,把它加入到cachedViews數(shù)組就好了。但是有個(gè)問(wèn)題就是,假設(shè)這里有個(gè)二級(jí)路由1-1,三級(jí)路由1-1-1,1-1-2,當(dāng)要關(guān)掉1-1-1組件時(shí),你到底要不要把1-1給刪了,如果刪了,緩存能順利失效,但是如果你之前是打開(kāi)了1-1-2,緩存的路由就會(huì)失效,因?yàn)樗且蕾?lài)1-1的。如果不刪的話(huà),在側(cè)邊欄打開(kāi)1-1-1的鏈接的時(shí)候,它又會(huì)重新復(fù)用回原本的組件。

2 把三級(jí)(概念上的)轉(zhuǎn)化為二級(jí)(真實(shí))

在這里想來(lái),如果1-1-1,1-1-2,其實(shí)只是因?yàn)榉衷谕?lèi)別里,兩者如果沒(méi)有實(shí)際共享的數(shù)據(jù),那可以考慮把1-1的路由組件關(guān)掉,在我實(shí)踐的項(xiàng)目就是如此,1-1-1和1-1-2只是同屬在二級(jí)菜單下,并沒(méi)有共享數(shù)據(jù)。但是生成菜單的時(shí)候是用router表的,那么生成菜單的用原本的,生成路由的時(shí)候用替換的。

下面是demo代碼:

將要被替換的路由加上noCompoent屬性。

function delteFakeParent(router,prefix) {
 var newRouter = { ...router }
 if(prefix){
 newRouter.path = prefix + '/' + router.path
 }
 if (!router.children) return newRouter
 var children = []
 if (router.noCompoent) {
 for (let i = 0; i < router.children.length; i++) {
  const item = delteFakeParent(router.children[i], newRouter.path)
  if (Array.isArray(item)) {
  item.forEach(el => {
   children.push(el)
  })
  }else{
  children.push(item)
  }
 }
 newRouter = children
 } else {
 for (let i = 0; i < router.children.length; i++) {
  const item = delteFakeParent(router.children[i])
  if (Array.isArray(item)) {
  item.forEach(el => {
   children.push(el)
  })
  }
 }
 newRouter.children = children
 }
 
 return newRouter
}

var backendManageRouter1 = {
 name: 'BackendManage',
 meta: {
 title: '后臺(tái)管理',
 icon: 'index-management'
 },
 children: [{
 path: 'user-manage',
 name: 'UserManage',
 noCompoent: true,
 meta: {
  title: '用戶(hù)管理',
  icon: 'rule-definition'
 },
 alwaysShow: true,
 children: [{
  path: 'user',
  name: 'User',
  meta: {
  title: '用戶(hù)管理',
  icon: 'quality-control'
  },
  noCompoent: true,
  children: [
  {
   path: 'a',
   name: 'ad',
   meta: {
   title: 'ad管理',
   icon: 'quality-control'
   },
  }
  ]
 }, {
  path: 'role',
  name: 'Role',
  meta: {
  title: '角色管理',
  icon: 'rule-task-monitor'
  }
 }]
 }]
}

delteFakeParent這個(gè)函數(shù)做的就是創(chuàng)建一個(gè)router副本,遍歷它的children,當(dāng)這個(gè)路由被標(biāo)記為noCompoent: true,就把它替換成它的children,回溯的過(guò)程中如果router是一個(gè)數(shù)組就代表這個(gè)router是被替換過(guò),那么就遍歷它,把它每一項(xiàng)放到router.children里面,這樣就可以做到跟它其他children平級(jí)。
修改了這個(gè)之后要記著把真實(shí)router和菜單router同時(shí)暴露出去,菜單的項(xiàng)目是讀取store中的permission.js的routers,那么這里set-router一方面要處理真是router和菜單router,需要增加一個(gè)state

3. 使用vuex存儲(chǔ)數(shù)據(jù)

上面那個(gè)方案也只是針對(duì)二級(jí)路由組件不需要顯示出來(lái),那么可以放到一級(jí)路由的children里面,但是如果是有需要的話(huà),還是使用vuex來(lái)存儲(chǔ)數(shù)據(jù)比較好。

到此這篇關(guān)于vue-template-admin三級(jí)路由無(wú)法緩存的解決方案的文章就介紹到這了,更多相關(guān)vue-template-admin三級(jí)路由緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • VUE2 前端實(shí)現(xiàn) 靜態(tài)二級(jí)省市聯(lián)動(dòng)選擇select的示例

    VUE2 前端實(shí)現(xiàn) 靜態(tài)二級(jí)省市聯(lián)動(dòng)選擇select的示例

    下面小編就為大家分享一篇VUE2 前端實(shí)現(xiàn) 靜態(tài)二級(jí)省市聯(lián)動(dòng)選擇select的示例。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • Vue-axios-post數(shù)據(jù)后端接不到問(wèn)題解決

    Vue-axios-post數(shù)據(jù)后端接不到問(wèn)題解決

    這篇文章主要介紹了Vue-axios-post數(shù)據(jù)后端接不到問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • vue響應(yīng)式原理與雙向數(shù)據(jù)的深入解析

    vue響應(yīng)式原理與雙向數(shù)據(jù)的深入解析

    Vue 最獨(dú)特的特性之一,是其非侵入性的響應(yīng)式系統(tǒng)。下面這篇文章主要給大家介紹了關(guān)于vue響應(yīng)式原理與雙向數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • 淺談vue?腳手架文件結(jié)構(gòu)及加載過(guò)程

    淺談vue?腳手架文件結(jié)構(gòu)及加載過(guò)程

    這篇文章主要介紹了vue腳手架文件結(jié)構(gòu)及加載過(guò)程淺談,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Vue中大屏適配和局部適配的方案總結(jié)

    Vue中大屏適配和局部適配的方案總結(jié)

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Vue.js的Mixins功能結(jié)合JavaScript實(shí)現(xiàn)頁(yè)面內(nèi)容的自適應(yīng)縮放,以適應(yīng)不同比例的屏幕,需要的小伙伴可以參考下
    2025-03-03
  • vue在線(xiàn)預(yù)覽word、excel、pdf、txt、圖片的方法實(shí)例

    vue在線(xiàn)預(yù)覽word、excel、pdf、txt、圖片的方法實(shí)例

    最近工作中遇到了一個(gè)需要在線(xiàn)預(yù)覽文件的需求,所以這篇文章主要給大家介紹了vue在線(xiàn)預(yù)覽word、excel、pdf、txt、圖片的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • 詳解Vue源碼中一些util函數(shù)

    詳解Vue源碼中一些util函數(shù)

    這篇文章主要介紹了Vue源碼中一些util函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 使用ElementUI el-upload實(shí)現(xiàn)一次性上傳多個(gè)文件

    使用ElementUI el-upload實(shí)現(xiàn)一次性上傳多個(gè)文件

    在日常的前端開(kāi)發(fā)中,文件上傳是一個(gè)非常常見(jiàn)的需求,尤其是在用戶(hù)需要一次性上傳多個(gè)文件的場(chǎng)景下,ElementUI作為一款非常優(yōu)秀的Vue.js 2.0組件庫(kù),為我們提供了豐富的UI組件,本文介紹了如何使用ElementUI el-upload實(shí)現(xiàn)一次性上傳多個(gè)文件,需要的朋友可以參考下
    2024-08-08
  • vue如何根據(jù)權(quán)限生成動(dòng)態(tài)路由、導(dǎo)航欄

    vue如何根據(jù)權(quán)限生成動(dòng)態(tài)路由、導(dǎo)航欄

    這篇文章主要介紹了vue如何根據(jù)權(quán)限生成動(dòng)態(tài)路由、導(dǎo)航欄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Vue子組件與父組件詳細(xì)解析

    Vue子組件與父組件詳細(xì)解析

    這篇文章主要介紹的是Vue子組件與父組件,什么是父組件,什么是子組件很多時(shí)候面對(duì)這個(gè)問(wèn)題我們都會(huì)有所混淆,下面文章我們就來(lái)詳細(xì)介紹,需要的朋友可以參考一下
    2021-10-10

最新評(píng)論

衡东县| 彭泽县| 鸡西市| 昭平县| 历史| 达日县| 任丘市| 琼中| 株洲市| 大安市| 简阳市| 怀来县| 翼城县| 荥经县| 双江| 高安市| 龙口市| 鱼台县| 正宁县| 包头市| 红桥区| 图片| 天等县| 岳阳县| 东乌珠穆沁旗| 阳高县| 北碚区| 宝山区| 房产| 甘谷县| 弥渡县| 乐至县| 蓬莱市| 长阳| 庆元县| 林甸县| 澄迈县| 大姚县| 大化| 定兴县| 京山县|