vue-addRoute-keepAlive

1. 前言

  1. 很多場景都是動態(tài)路由,那今天來梳理下動態(tài)路由

2. 動態(tài)路由-場景-雜談

  1. 應(yīng)用場景 緊接上篇文章vue路由守衛(wèi)
  2. 上篇文章我相信有部分道友 就有個(gè)疑問,路由守衛(wèi) 也可以是權(quán)限控制,
  3. 比方說根據(jù)用戶的級別,顯示的菜單是不一樣的,也就是所謂的權(quán)限控制
  1. 記得早期有個(gè)項(xiàng)目,需要權(quán)限控制到按鈕級別,同一個(gè)界面,不同用戶登錄,顯示界面有些按鈕有,有些沒有,其他都一樣

3. addRoutes語法

  1. 參數(shù)是個(gè)數(shù)組,
  2. routes參數(shù)名應(yīng)該已經(jīng)猜到了吧 ,就是你的路由配置表,在這動態(tài)添加
  3. 這就是編程的方式,在運(yùn)行時(shí),動態(tài)的添加路由的原理
//vue-router 3x寫法
router.addRoutes(routes)
//vue-router 4x寫法
router.addRoute(routes)
  1. 記得上篇文章的例子address界面判斷用戶是否登錄
  2. 還拿這個(gè)做例子

4. 需求

  1. 只有管理員才顯示address這個(gè)界面
  2. 也就是登錄的時(shí)候肯定根據(jù)用戶信息判斷是否配置這個(gè)路由
  3. 而不是不管啥用戶級別,都一股腦的配置在路由表
  1. 邏輯分析


    動態(tài)路由配置.png

5. 路由邏輯代碼實(shí)現(xiàn)

// ******************** 動態(tài)路由
// 全局守衛(wèi)
router.beforeEach((to,from,next)=>{
  // 判斷路由是否需要守衛(wèi)
  //meta數(shù)據(jù)的方式
  if(window.isLogin){
    // 已登錄
    if(to.path ==="/login"){
      next("/")
    }else{
      next()
    }
  }else{
    // 未登錄
    if(to.path ==="/login"){
      next()
    }else{
     next("/login?redirect="+to.fullPath)
// 傳參的方式比較多
//next({name:"Login",params:{toRouterName:to.name}})
    }
  }

})

6. 登錄邏輯實(shí)現(xiàn)

整體思路就是 在 跳轉(zhuǎn)之前把路由添加上去

6.1 addRoutes

    logOut() {
      window.isLogin = false;
      console.log(this.$route);
      this.$router.push("/");
    },
    loginBtn() {
      window.isLogin = true;
      console.log("添加前:", this.$route);
      // 動態(tài)添加
      this.$router.addRoutes([
        {
          path: "/address",
          name: "Address",
          component: () => import("../views/address.vue")
        },
      ]);

      console.log("添加后:", this.$route);
// 不同的傳參方式,對應(yīng)不同的接收方式
//this.$router.push({name:this.$route.params.toRouterName})
      this.$router.push(this.$route.query.redirect);
    }

6.2 addRoute

  1. router.addRoutes
    已廢棄:使用 router.addRoute() 代替。
  2. setTimeout只是為了模擬異步請求的情況

      setTimeout(() => {
        this.$router.addRoute({ path: '/add', component: AddView })
// 第一個(gè)參數(shù)是想要給哪個(gè)路由添加子路由
// 就寫哪個(gè)路由的別名/name
        this.$router.addRoute('News',{ path: '/plus', name:'Plus', component: AddView })
        this.isAdd = true
      }, 1000)
  1. 嵌套路由動態(tài)添加等價(jià)下面代碼
router.addRoute({
  name: 'News',
  path: '/news',
  component: News,
  children: [{ path: 'plus', component: AddView }],
})

6.3 一個(gè)參數(shù)

  1. 添加一條新路由規(guī)則诫惭。如果該路由規(guī)則有 name于樟,并且已經(jīng)存在一個(gè)與之相同的名字,則會覆蓋它血当。

6.3.1語法

addRoute(route: RouteConfig): () => void

6.3.2實(shí)際代碼

 // 實(shí)際開發(fā)情況 可以根據(jù)用戶的級別 ,添加不同的 路由界面
       const serve =  {
        path: "/serve",
        name: "servePage",
        component: () => import("@/views/serve.vue")
      }
      this.$router.addRoute(serve);
      //測試
      this.$router.push("serve")

1.path路徑/ 必須寫
2.注意這個(gè)因?yàn)槭莿討B(tài)添加的 不能通過在瀏覽器地址的直接輸入 path路徑的形式跳轉(zhuǎn)


6.4 2個(gè)參數(shù)

  1. 添加一條新的路由規(guī)則記錄作為現(xiàn)有路由的子路由。如果該路由規(guī)則有 name禀忆,并且已經(jīng)存在一個(gè)與之相同的名字臊旭,則會覆蓋它
  2. 其實(shí)就是添加子路由

6.4.1 語法

addRoute(parentName: string, route: RouteConfig): () => void

6.4.2 二級路由

1.png

6.4.3 改造

const serve =  {
        path: "/one/wait",
        name: "wait",
        component: () => import("@/views/page/wait.vue")
      }
      this.$router.addRoute("/one/wait",serve);
     this.$router.push("/one/wait") //測試

1.path路徑/ 必須寫,而且必須帶上一級路徑的path
2.addRoute 參數(shù)1,是父路由的 path 或者是父路由的 name


7.路由緩存

  1. 界面在來回點(diǎn)擊 鏈接,通過路由跳轉(zhuǎn)的情況下,每次都會發(fā)送請求
  2. 如果確定 這些界面的數(shù)據(jù)短期內(nèi)不會變的情況下,可以進(jìn)行緩存

keep-alive

<keep-alive>
       <router-view />
    </keep-alive>

keep-alive包裹我們的路由,這樣以后再進(jìn)這個(gè)界面,請求就不會在發(fā)送了


8. 緩存配置

注意和組件 name屬性值保持一致


1.png

8.1. include 指定緩存路由

1.字符串或正則表達(dá)式。只有名稱匹配的組件會被緩存

  1. 單個(gè)緩存
 <keep-alive include="shop">
       <router-view />
    </keep-alive>

  1. 多個(gè)緩存寫法
    **,**隔開
 <keep-alive include="shop,my">
       <router-view />
    </keep-alive>

  1. 變量動態(tài)寫法
    **:** 綁定 值是個(gè)數(shù)組
 <keep-alive  :include="[]">
       <router-view />
    </keep-alive>

8.4 exclude

字符串或正則表達(dá)式箩退。任何名稱匹配的組件都不會被緩存离熏。


8.5 max - 數(shù)字,最多可以緩存多少組件實(shí)例。


9.鉤子

   activated(){
            console.log("active-被 keep-alive 緩存的組件激活時(shí)調(diào)用戴涝。")
        },
        deactivated(){
            console.log("deactivated被 keep-alive 緩存的組件停用時(shí)調(diào)用")
        }
  1. 當(dāng)組件在 <keep-alive> 內(nèi)被切換時(shí)滋戳,它的mountedunmounted生命周期鉤子不會被調(diào)用,
  2. 取而代之的是 activateddeactivated啥刻。(這會運(yùn)用在 <keep-alive> 的直接子節(jié)點(diǎn)及其所有子孫節(jié)點(diǎn)奸鸯。)

10. 后記

  1. 刪除動態(tài)路由
  2. 獲取動態(tài)路由等等可以看官網(wǎng)刪除路由

參考資料

vue路由-3守衛(wèi)
路由守衛(wèi)
keep-alive


初心

我所有的文章都只是基于入門,初步的了解可帽;是自己的知識體系梳理;
如果能幫助到有緣人,非常的榮幸,一切為了部落的崛起;
共勉
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末娄涩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子映跟,更是在濱河造成了極大的恐慌蓄拣,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件努隙,死亡現(xiàn)場離奇詭異球恤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)荸镊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門咽斧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人躬存,你說我怎么就攤上這事收厨。” “怎么了优构?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵塘淑,是天一觀的道長褐奥。 經(jīng)常有香客問我,道長籍琳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘进栽。我一直安慰自己,他們只是感情好恭垦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布快毛。 她就那樣靜靜地躺著,像睡著了一般番挺。 火紅的嫁衣襯著肌膚如雪唠帝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天玄柏,我揣著相機(jī)與錄音襟衰,去河邊找鬼。 笑死粪摘,一個(gè)胖子當(dāng)著我的面吹牛瀑晒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播徘意,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼苔悦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了椎咧?” 一聲冷哼從身側(cè)響起玖详,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎邑退,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劳澄,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡地技,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了秒拔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莫矗。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖砂缩,靈堂內(nèi)的尸體忽然破棺而出作谚,到底是詐尸還是另有隱情,我是刑警寧澤庵芭,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布妹懒,位于F島的核電站,受9級特大地震影響双吆,放射性物質(zhì)發(fā)生泄漏眨唬。R本人自食惡果不足惜会前,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匾竿。 院中可真熱鬧瓦宜,春花似錦、人聲如沸岭妖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昵慌。三九已至假夺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間废离,已是汗流浹背侄泽。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜻韭,地道東北人悼尾。 一個(gè)月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像肖方,于是被迫代替她去往敵國和親闺魏。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容