vue路由-4-動(dòng)態(tài)添加-addRoute-keepAlive

1. 前言

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


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

應(yīng)用場景 緊接上篇文章vue路由守衛(wèi)
上篇文章我相信有部分道友 就有個(gè)疑問,路由守衛(wèi) 也可以是權(quán)限控
制,

比方說根據(jù)用戶的級(jí)別,顯示的菜單是不一樣的,也就是所謂的權(quán)限控制

記得早期有個(gè)項(xiàng)目,需要權(quán)限控制到按鈕級(jí)別,同一個(gè)界面,不同用戶登錄,顯示界面有些按鈕有,有些沒有


3. addRoutes語法

參數(shù)是個(gè)數(shù)組,
routes參數(shù)名應(yīng)該已經(jīng)猜到了吧 ,就是你的路由配置表,在這動(dòng)態(tài)添加
這就是編程的方式,在運(yùn)行時(shí),動(dòng)態(tài)的添加路由的原理

router.addRoutes(routes)

記得上篇文章的例子address界面判斷用戶是否登錄
還拿這個(gè)做例子


4. 需求

只有管理員才顯示address這個(gè)界面
也就是登錄的時(shí)候肯定根據(jù)用戶信息判斷是否配置這個(gè)路由

而不是不管啥用戶級(jí)別,都一股腦的配置在路由表

邏輯分析


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

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

// ******************** 動(dòng)態(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);
      // 動(dòng)態(tài)添加
      this.$router.addRoutes([
        {
          path: "/address",
          name: "Address",
          component: () => import("../views/address.vue")
        },
      ]);

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

6.2 addRoute

router.addRoutes
已廢棄:使用 router.addRoute() 代替宿百。


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

添加一條新路由規(guī)則。如果該路由規(guī)則有 name砍濒,并且已經(jīng)存在一個(gè)與之相同的名字诲侮,則會(huì)覆蓋它饶辙。

6.3.1語法

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

6.3.2實(shí)際代碼

 // 實(shí)際開發(fā)情況 可以根據(jù)用戶的級(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)槭莿?dòng)態(tài)添加的 不能通過在瀏覽器地址的直接輸入 path路徑的形式跳轉(zhuǎn)


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

添加一條新的路由規(guī)則記錄作為現(xiàn)有路由的子路由耳幢。如果該路由規(guī)則有 name模暗,并且已經(jīng)存在一個(gè)與之相同的名字禁悠,則會(huì)覆蓋它
其實(shí)就是添加子路由

6.4.1 語法

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

6.4.2 二級(jí)路由

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路徑/ 必須寫,而且必須帶上一級(jí)路徑的path
2.addRoute 參數(shù)1,是父路由的 path 或者是父路由的 name


7.路由緩存

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

keep-alive

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

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


8. 緩存配置

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


1.png

8.1. include 指定緩存路由

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

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

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

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

8.4 exclude

字符串或正則表達(dá)式兑宇。任何名稱匹配的組件都不會(huì)被緩存碍侦。


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


9.鉤子

   activated(){
            console.log("active-被 keep-alive 緩存的組件激活時(shí)調(diào)用顾孽。")
        },
        deactivated(){
            console.log("deactivated被 keep-alive 緩存的組件停用時(shí)調(diào)用")
        }

參考資料

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


初心

我所有的文章都只是基于入門,初步的了解比规;是自己的知識(shí)體系梳理;
如果能幫助到有緣人,非常的榮幸,一切為了部落的崛起;
共勉
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末若厚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蜒什,更是在濱河造成了極大的恐慌测秸,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灾常,死亡現(xiàn)場離奇詭異霎冯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)钞瀑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門沈撞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人雕什,你說我怎么就攤上這事缠俺∠跃В” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵壹士,是天一觀的道長磷雇。 經(jīng)常有香客問我,道長躏救,這世上最難降的妖魔是什么唯笙? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮盒使,結(jié)果婚禮上崩掘,老公的妹妹穿的比我還像新娘。我一直安慰自己忠怖,他們只是感情好呢堰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凡泣,像睡著了一般枉疼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鞋拟,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天骂维,我揣著相機(jī)與錄音,去河邊找鬼贺纲。 笑死航闺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的猴誊。 我是一名探鬼主播潦刃,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼懈叹!你這毒婦竟也來了乖杠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤澄成,失蹤者是張志新(化名)和其女友劉穎胧洒,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體墨状,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卫漫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肾砂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片列赎。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖镐确,靈堂內(nèi)的尸體忽然破棺而出粥谬,到底是詐尸還是另有隱情肛根,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布漏策,位于F島的核電站派哲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏掺喻。R本人自食惡果不足惜芭届,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望感耙。 院中可真熱鬧褂乍,春花似錦、人聲如沸即硼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽只酥。三九已至褥实,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間裂允,已是汗流浹背损离。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绝编,地道東北人僻澎。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像十饥,于是被迫代替她去往敵國和親窟勃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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