vue-router, 嵌套路由,路由傳參,導航守衛(wèi),keep-alive詳解

安裝和使用vue-router

步驟一: 安裝vue-router
npm install vue-router --save
步驟二: 在模塊化工程中使用它(因為是一個插件, 所以可以通過Vue.use()來安裝路由功能)
第一步:導入路由對象,并且調用 Vue.use(VueRouter)
第二步:創(chuàng)建路由實例,并且傳入路由映射配置
第三步:在Vue實例中掛載創(chuàng)建的路由實例

使用vue-router的步驟:

第一步: 創(chuàng)建路由組件
第二步: 配置路由映射: 組件和路徑映射關系
第三步: 使用路由: 通過<router-link>和<router-view>

import Vue from ‘vue’
import VueRouter from ‘vue-router’
Vue.use(VueRouter)
如圖
創(chuàng)建router實例


router1.png

掛載到Vue實例中


router2.png

步驟一創(chuàng)建路由組件
router3.png

第二步: 配置路由映射: 組件和路徑映射關系


router4.png

第三步: 使用路由: 通過<router-link>和<router-view>


router5.png

補充路由重定向

 {
        path:'',
        redirect:'/home'
    },

默認情況下, 路徑的改變使用的URL的hash.

如果希望使用HTML5的history模式, 非常簡單, 進行如下配置即可:

const router = new VueRouter({
  routes,
  mode:'history'
})

router-link補充

在前面的<router-link>中, 我們只是使用了一個屬性: to, 用于指定跳轉的路徑.

<router-link>還有一些其他屬性:
tag: tag可以指定<router-link>之后渲染成什么組件, 比如上面的代碼會被渲染成一個<li>元素, 而不是

<router-link to='/home' tag='li'>

replace: replace不會留下history記錄, 所以指定replace的情況下, 后退鍵返回不能返回到上一個頁面中
active-class: 當<router-link>對應的路由匹配成功時, 會自動給當前元素設置一個router-link-active的class, 設置active-class可以修改默認的名稱.

在進行高亮顯示的導航菜單或者底部tabbar時, 會使用到該類.
但是通常不會修改類的屬性, 會直接使用默認的router-link-active即可.

修改linkActiveClass

該class具體的名稱也可以通過router實例的屬性進行修改


router6.png

路由代碼跳轉

有時候, 頁面的跳轉可能需要執(zhí)行對應的JavaScript代碼, 這個時候, 就可以使用第二種跳轉方式了
比如, 我們將代碼修改如下:

this.$router.push('路徑')

動態(tài)路由

在某些情況下蹈丸,一個頁面的path路徑可能是不確定的,比如我們進入用戶界面時宋梧,希望是如下的路徑:
/user/aaaa或/user/bbbb
除了有前面的/user之外复唤,后面還跟上了用戶的ID
這種path和Component的匹配關系,我們稱之為動態(tài)路由(也是路由傳遞數(shù)據(jù)的一種方式)

路由的懶加載

認識路由的懶加載

首先, 我們知道路由中通常會定義很多不同的頁面.
這個頁面最后被打包在哪里呢? 一般情況下, 是放在一個js文件中.
但是, 頁面這么多放在一個js文件中, 必然會造成這個頁面非常的大.
如果我們一次性從服務器請求下來這個頁面, 可能需要花費一定的時間, 甚至用戶的電腦上還出現(xiàn)了短暫空白的情況.
如何避免這種情況呢? 使用路由懶加載就可以了.

路由懶加載做了什么?
路由懶加載的主要作用就是將路由對應的組件打包成一個個的js代碼塊.
只有在這個路由被訪問到的時候, 才加載對應的組件

懶加載的方式

const Home = () => import('../views/home/Home')
const Shopcart = () => import('../views/shopcart/Shopcart')

路由嵌套

嵌套路由是一個很常見的功能
比如在home頁面中, 我們希望通過/home/news和/home/message訪問一些內容.
一個路徑映射一個組件, 訪問這兩個路徑也會分別渲染兩個組件.

  {
    path:'/home',
    component:Home,
    children:[
      {
        path:'news',
        component:News,
      },
      {
        path:'message',
        component:Message,
      },
    ],
 
  }, 

嵌套默認路徑


router7.png

路由傳參傳遞參數(shù)的方式

傳遞參數(shù)主要有兩種類型: params和query

params的類型:

傳遞的方式: 在path后面跟上對應的值
path配置路由格式: /router/:id
在router-link 屬性to后跟 /123
傳遞后形成的路徑: /router/123, /router/abc

query的類型: 直接在router-link 屬性to后跟查詢字符串模式

?id=123&name='sss'不用修改path
傳遞的方式: 對象中使用query的key作為傳遞方式
傳遞后形成的路徑: /router?id=123, /router?id=abc

獲取參數(shù)

this.$route.params
this.$route.query

router8.png

<router-link>方式


linkto.png

傳遞參數(shù)方式二: JavaScript代碼


jscc.png

注意

$route和$router是有區(qū)別的
$router為VueRouter實例,想要導航到不同URL隘庄,則使用router.push方法
$route為當前router跳轉對象里面可以獲取name、path磷账、query峭沦、params等

導航守衛(wèi)

什么是導航守衛(wèi)?
vue-router提供的導航守衛(wèi)主要用來監(jiān)聽監(jiān)聽路由的進入和離開的.

1.全局前置守衛(wèi)

使用 router.beforeEach 注冊一個全局前置守衛(wèi):

router.beforeEach((to, from, next) => {
  // ...要做的事情
next()
})

確保要調用 next 方法,否則鉤子就不會被 resolved逃糟。

2全局后置守衛(wèi) 不會接受 next 函數(shù)也不會改變導航本身:

router.afterEach((to, from) => {
  // ...
//不需要next()
})

3路由獨享的守衛(wèi)

你可以在路由配置上直接定義 beforeEnter 守衛(wèi):

routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
      }
    }
  ]

這些守衛(wèi)與全局前置守衛(wèi)的方法參數(shù)是一樣的

導航守衛(wèi)補充
https://router.vuejs.org/zh/guide/advanced/navigation-guards.html#全局前置守衛(wèi)

keep-alive遇見vue-router

keep-alive 是 Vue 內置的一個組件吼鱼,可以使被包含的組件保留狀態(tài)蓬豁,或避免重新渲染。
它們有兩個非常重要的屬性:
include - 字符串或正則表達菇肃,只有匹配的組件會被緩存
exclude - 字符串或正則表達式地粪,任何匹配的組件都不會被緩存
router-view 也是一個組件,如果直接被包在 keep-alive 里面琐谤,所有路徑匹配到的視圖組件都會被緩存:


keepalive.png
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蟆技,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子斗忌,更是在濱河造成了極大的恐慌质礼,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件织阳,死亡現(xiàn)場離奇詭異眶蕉,居然都是意外死亡,警方通過查閱死者的電腦和手機唧躲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門造挽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弄痹,你說我怎么就攤上這事饭入。” “怎么了肛真?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵谐丢,是天一觀的道長。 經(jīng)常有香客問我毁欣,道長庇谆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任凭疮,我火速辦了婚禮,結果婚禮上串述,老公的妹妹穿的比我還像新娘执解。我一直安慰自己,他們只是感情好纲酗,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布衰腌。 她就那樣靜靜地躺著,像睡著了一般觅赊。 火紅的嫁衣襯著肌膚如雪右蕊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天吮螺,我揣著相機與錄音饶囚,去河邊找鬼帕翻。 笑死,一個胖子當著我的面吹牛萝风,可吹牛的內容都是我干的嘀掸。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼规惰,長吁一口氣:“原來是場噩夢啊……” “哼睬塌!你這毒婦竟也來了?” 一聲冷哼從身側響起歇万,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤揩晴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贪磺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硫兰,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年缘挽,在試婚紗的時候發(fā)現(xiàn)自己被綠了瞄崇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡壕曼,死狀恐怖苏研,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情腮郊,我是刑警寧澤摹蘑,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站轧飞,受9級特大地震影響衅鹿,放射性物質發(fā)生泄漏。R本人自食惡果不足惜过咬,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一大渤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掸绞,春花似錦泵三、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至敞映,卻和暖如春较曼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背振愿。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工捷犹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弛饭,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓伏恐,卻偏偏與公主長得像孩哑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子翠桦,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容