vue-router導航守衛(wèi)&&滾動&&路由懶加載

導航守衛(wèi)

正如其名奸汇,vue-router提供的導航守衛(wèi)主要用來通過跳轉(zhuǎn)或取消的方式守衛(wèi)吻商,有多種機會植入路由導航過程種:全局的薄霜,單個路由獨享的茎芭,或者組件級的

記住 參數(shù)或查詢的改變并不會觸發(fā)進入/離開的導航守衛(wèi)。 你可以通過觀察 $route 對象來應對這些變化看锉,或使用 beforeRouteUpdata 的組件內(nèi)守衛(wèi)姿锭。

全局守衛(wèi)

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

const router = new VueRouter({...})
router.beforeEach((to,form,next)=>{
    
})

當一個導航觸發(fā)時,全局前置守衛(wèi)按照創(chuàng)建順序調(diào)用伯铣。守衛(wèi)是異步解析執(zhí)行呻此,此時導航在所有守衛(wèi)resolve完之前一直處于 等待中

每個守衛(wèi)方法接受三個參數(shù):
to:Route:即將要進入的目標 路由對象
from: Route :當前導航正要離開的路由
next: Function: 一定要調(diào)用該方法來resolve這個鉤子,執(zhí)行效果依賴next方法調(diào)用參數(shù)

  • next():進行管道中的下一個鉤子腔寡,如果全部鉤子執(zhí)行完了焚鲜,則導航的狀態(tài)就是confirmed(確認的)
  • next(false): 中斷當前的導航。如果瀏覽器的url改變了(可能是用戶手動或者瀏覽器后退按鈕)蹬蚁,那么url地址會重置到 from 路由對應的地址恃泪。
  • next('/')或者next({path: '/'}):跳轉(zhuǎn)到一個不同的地址,當前的導航被中斷犀斋,然后進行一個新的導航贝乎。你可以向next傳遞任意位置對象,且允許設置諸如 replace:true叽粹、name: 'home'之類的選項以及任何用在router-link的toprop或者router.push中的選項
  • next(error):(2.4.0+)如果傳入next的參數(shù)是一個Error實例览效,則導航會被終止且該錯誤會被傳遞給router.onError()注冊過的回調(diào)
確保要調(diào)用 next 方法却舀,否則鉤子就不會被 resolved

完整的導航解析

  1. 導航被觸發(fā)
  2. 在失活的組件里調(diào)用離開守衛(wèi)
  3. 調(diào)用全局的 beforeEach 守衛(wèi)
  4. 在重用的組件里調(diào)用 beforeRouteUpdata 守衛(wèi)
  5. 在路由配置里調(diào)用 beforeEnter
  6. 解析異步路由組件
  7. 在被激活的組件里調(diào)用 beforeRouteEnter
  8. 調(diào)用全局的 beforeResolve 守衛(wèi)(2.5+)
  9. 導航被確認
  10. 調(diào)用全局的 afterEach 鉤子
  11. 觸發(fā)DOM 更新
  12. 用創(chuàng)建好的實例調(diào)用 beforeRouteEnter 守衛(wèi)中傳給 next 的回調(diào)函數(shù)

滾動行為

使用前端路由,當切換到新路由時锤灿,想要頁面滾動到頂部挽拔,或者時保持原先的滾動位置,就像重新加載頁面那樣但校,vue-router就能做到

ps:這個功能只在支持 history.pushState 的瀏覽器中可用

當創(chuàng)建一個 Router 實例螃诅,你可以提供一個 scrollBehavior 方法:

const router = new VueRouter({
    routes: [...]
    scrollBehavior(to,from,savedPosition){
        // return 期望滾動到哪個的位置
    }
})

scrollBehavior 方法接收 to 和 from 路由對象,第三個參數(shù) savedPosition 當且僅當 popstate 導航(通過瀏覽器的 前進\后退 按鈕觸發(fā))時才可用

路由懶加載

當打包構建應用時状囱,javascript包會變得非常大术裸、影響頁面加載,如果我們能把不同路由對應得組件分割成不同得代碼塊亭枷,然后當路由訪問的時候才在家對應組件袭艺,這樣更加高效
結合Vue的異步組件和webpack的代碼分割功能,輕松實現(xiàn)路由組件的懶加載叨粘。
首先猾编,可以將異步組件定義為返回一個Promise的工廠函數(shù)

const Foo = () => Promise.resolve({// 組件定義對象})

第二,在webpack2中升敲,我們可以使用動態(tài) import語法來定義代碼分塊點
import('./Foo.vue')

ps: 如果使用的時babel答倡,你將需要添加 sybtax-dynamic-import 插件,才能使Babel可以正確的解析語法

結合這兩者冻晤,這就使如何定義一個能夠被webpack自動代碼分割的異步組件

const Foo = () => import('./Foo.vue')

在路由配置中什么都不需要改變苇羡,只需要像往常一樣使用Foo:
const router = new VueRouter({
routes: [
{path: '/foo', component: Foo}
]
})

把組件按組分塊

有時候我們想把某個路由下的所有組件都打包在同個異步塊中绸吸,只需要使用命名 chunk鼻弧,一個特殊的注釋語法來提高chunk name(需要webpack>2.4)

const Foo = () => import(/* webpackChunkName: "group-foo" */ './Foo.vue')

webpack 會將任何一個異步模塊與相同的塊名稱組合到相同的異步塊中

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锦茁,隨后出現(xiàn)的幾起案子攘轩,更是在濱河造成了極大的恐慌,老刑警劉巖码俩,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件度帮,死亡現(xiàn)場離奇詭異,居然都是意外死亡稿存,警方通過查閱死者的電腦和手機笨篷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓣履,“玉大人率翅,你說我怎么就攤上這事⌒溆” “怎么了冕臭?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵腺晾,是天一觀的道長。 經(jīng)常有香客問我辜贵,道長悯蝉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任托慨,我火速辦了婚禮鼻由,結果婚禮上,老公的妹妹穿的比我還像新娘厚棵。我一直安慰自己嗡靡,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布窟感。 她就那樣靜靜地躺著讨彼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柿祈。 梳的紋絲不亂的頭發(fā)上哈误,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音躏嚎,去河邊找鬼蜜自。 笑死,一個胖子當著我的面吹牛卢佣,可吹牛的內(nèi)容都是我干的重荠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼虚茶,長吁一口氣:“原來是場噩夢啊……” “哼戈鲁!你這毒婦竟也來了?” 一聲冷哼從身側響起嘹叫,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤婆殿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后罩扇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體婆芦,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年喂饥,在試婚紗的時候發(fā)現(xiàn)自己被綠了消约。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡员帮,死狀恐怖或粮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情集侯,我是刑警寧澤被啼,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布帜消,位于F島的核電站,受9級特大地震影響浓体,放射性物質(zhì)發(fā)生泄漏泡挺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一命浴、第九天 我趴在偏房一處隱蔽的房頂上張望娄猫。 院中可真熱鬧,春花似錦生闲、人聲如沸媳溺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悬蔽。三九已至,卻和暖如春捉兴,著一層夾襖步出監(jiān)牢的瞬間蝎困,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工倍啥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留禾乘,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓虽缕,卻偏偏與公主長得像始藕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子氮趋,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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

  • 導航守衛(wèi) 導航守衛(wèi)主要用來通過跳轉(zhuǎn)或取消的方式守衛(wèi)導航伍派。 參數(shù)或查詢的改變并不會觸發(fā)進入/離開的導航守衛(wèi)。 1凭峡、全...
    SailingBytes閱讀 1,166評論 1 3
  • 學習目的 學習Vue的必備技能拙已,必須 熟練使用 Vue-router,能夠在實際項目中運用摧冀。 Vue-rout...
    _1633_閱讀 91,680評論 3 58
  • 組件相關鉤子函數(shù): beforeCreate、created系宫、beforeMount索昂、mounted、before...
    744354889606閱讀 19,062評論 0 37
  • Vue-Router簡介 Vue-Router是Vue.js官方維護的路由插件扩借,同時也是官方推薦的路由插件椒惨。它與V...
    SunnySky_閱讀 848評論 0 1
  • vue-router學習筆記 安裝 并且如果在一個模塊化工程中使用它,必須要通過Vue.use()明確地安裝路由功...
    EL_PSY_CONGROO閱讀 571評論 0 0