站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        vue路由鉤子函數(shù)有幾種?分別是什么?

        vue路由鉤子函數(shù)有2種,分別為:1、全局守衛(wèi)(全局鉤子函數(shù)),指的是“index.js”中的router對(duì)象;2、路由守衛(wèi)(針對(duì)單個(gè)路由鉤子函數(shù));3、組件守衛(wèi)(組件級(jí)鉤子函數(shù)),是定義在路由組件內(nèi)部的守衛(wèi)。

        vue路由鉤子函數(shù)有幾種?分別是什么?

        本教程操作環(huán)境:windows7系統(tǒng)、vue2.9.6版,DELL G3電腦。

        vue-router鉤子函數(shù) ,其實(shí)說(shuō)的就是 導(dǎo)航守衛(wèi) 。

        引用官網(wǎng)的話

        導(dǎo)航” 表示路由正在發(fā)生改變。

        vue-router 提供的導(dǎo)航守衛(wèi)主要用來(lái)通過 跳轉(zhuǎn)取消 的方式 守衛(wèi)導(dǎo)航 。有多種機(jī)會(huì)植入路由導(dǎo)航過程中:全局的, 單個(gè)路由獨(dú)享的, 或者組件級(jí)的。

        也就是:全局守衛(wèi)(全局鉤子函數(shù))路由守衛(wèi)(針對(duì)單個(gè)路由鉤子函數(shù))、組件守衛(wèi)(組件級(jí)鉤子函數(shù))。

        代碼演示環(huán)境搭建

        先簡(jiǎn)單搭建一下環(huán)境

        index.js

        import { createRouter, createWebHashHistory } from 'vue-router';  const router = createRouter({   history: createWebHashHistory(),   routes: [     {       path: '/a',       component: () => import('../components/A.vue'),     },     {       path: '/b',       component: () => import('../components/B.vue'),     },     {       path: '/c',       component: () => import('../components/C.vue'),     },   ], }); export default router;

        main.js

        // index.js import router from "./router";  createApp(App).use(router).mount("#app");

        頁(yè)面A

        <template>   <div>     <h1>我是頁(yè)面A啊</h1>     <comp></comp>   </div> </template>

        頁(yè)面B

        <template>   <div>     <h1>我是頁(yè)面B啊</h1>     <comp></comp>   </div> </template>

        頁(yè)面C

        <template>   <div>     <h1>我是頁(yè)面C啊</h1>     <comp></comp>   </div> </template>

        通用組件

        <template>   <div>我是公用組件啊</div> </template>

        當(dāng)前頁(yè)面是這樣的,有點(diǎn)丑,湊活看吧,咱也不是來(lái)學(xué)習(xí) css

        vue路由鉤子函數(shù)有幾種?分別是什么?

        全局守衛(wèi)

        顧名思義,是要定義在全局的,也就是我們 index.js 中的 router 對(duì)象。

        beforeEach

        全局前置守衛(wèi),在路由跳轉(zhuǎn)前觸發(fā),它在 每次導(dǎo)航 時(shí)都會(huì)觸發(fā)。

        通過 router.beforeEach 注冊(cè)一個(gè)全局前置守衛(wèi)。

        vue路由鉤子函數(shù)有幾種?分別是什么?

        參數(shù)

        beforeEach 全局前置守衛(wèi)接收三個(gè)參數(shù)

        • to: Route: 即將要進(jìn)入的目標(biāo)路由對(duì)象
        • from: Route: 當(dāng)前導(dǎo)航正要離開的路由對(duì)象
        • next: Function: 一定要調(diào)用該方法不然會(huì)阻塞路由。

        注意: next 參數(shù)可以不添加,但是一旦添加,則必須調(diào)用一次,否則路由跳轉(zhuǎn)等會(huì)停止。

        next()方法的幾種情況

        • next(): 進(jìn)行管道中的下一個(gè)鉤子。
        • next(false): 中斷當(dāng)前的導(dǎo)航?;氐?from 路由對(duì)應(yīng)的地址。
        • next(’/’) 或者 next({ path: ‘/’ }): 跳轉(zhuǎn)到一個(gè)不同的地址,可傳遞的參數(shù)與 router.push 中選項(xiàng)一致。
        • next(error): 導(dǎo)航終止,且該錯(cuò)誤會(huì)被傳遞給 router.onError() 注冊(cè)過的回調(diào)。

        我們把前兩個(gè)參數(shù)打印出來(lái)看一下,里面包含路徑,參數(shù),元信息等內(nèi)容。

        vue路由鉤子函數(shù)有幾種?分別是什么?

        返回值

        • false:取消當(dāng)前的導(dǎo)航。
        • null,undefined,true或者直接return:調(diào)用下一個(gè)導(dǎo)航守衛(wèi)。

        定義多個(gè)守衛(wèi)

        全局前置守衛(wèi)可以定義多個(gè),根據(jù)創(chuàng)建順序調(diào)用。在所有守衛(wèi)完成之前導(dǎo)航一直處于等待中。

        下面這個(gè)例子中我們就定義了兩個(gè) beforeEach 全局前置守衛(wèi)??梢钥吹剑挥性趦擅胍院蠓謩e打印出兩條日志后才進(jìn)行頁(yè)面的跳轉(zhuǎn)。

        vue路由鉤子函數(shù)有幾種?分別是什么?

        vue路由鉤子函數(shù)有幾種?分別是什么?

        除了 beforeEach 全局前置守衛(wèi)之外,其他的全局守衛(wèi)都可以定義多個(gè),并且在所有守衛(wèi)完成之前導(dǎo)航一直處于等待中,其他的鉤子函數(shù)就不進(jìn)行演示了。

        beforeResolve

        全局解析守衛(wèi),在路由跳轉(zhuǎn)前,所有 組件內(nèi)守衛(wèi)異步路由組件 被解析之后觸發(fā),它同樣在 每次導(dǎo)航 時(shí)都會(huì)觸發(fā)。

        通過 router.beforeResolve 注冊(cè)一個(gè)全局解析守衛(wèi)。

        router.beforeResolve((to, from, next) => {   next(); })

        回調(diào)參數(shù),返回值和 beforeEach 一樣。也可以定義多個(gè)全局解析守衛(wèi)。

        afterEach

        全局后置鉤子,它發(fā)生在路由跳轉(zhuǎn)完成后,beforeEachbeforeResolve 之后,beforeRouteEnter(組件內(nèi)守衛(wèi))之前。它同樣在 每次導(dǎo)航 時(shí)都會(huì)觸發(fā)。

        通過 router.afterEach 注冊(cè)一個(gè)全局后置鉤子。

        vue路由鉤子函數(shù)有幾種?分別是什么?

        這個(gè)鉤子的兩個(gè)參數(shù)和 beforeEach 中的 tofrom 一樣。然而和其它全局鉤子不同的是,這些鉤子不會(huì)接受 next 函數(shù),也不會(huì)改變導(dǎo)航本身。

        路由守衛(wèi)

        顧名思義,就是跟路由相關(guān)的鉤子,我們的路由守衛(wèi)只有一個(gè),就是 beforeEnter

        beforeEnter

        需要在路由配置上定義 beforeEnter 守衛(wèi),此守衛(wèi)只在進(jìn)入路由時(shí)觸發(fā),在 beforeEach 之后緊隨執(zhí)行,不會(huì)在 paramsqueryhash 改變時(shí)觸發(fā)。

        vue路由鉤子函數(shù)有幾種?分別是什么?

        beforeEnter 路由守衛(wèi)的參數(shù)是 tofromnext ,同 beforeEach 一樣。

        組件守衛(wèi)

        顧名思義,是定義在路由組件內(nèi)部的守衛(wèi)。

        beforeRouteEnter

        vue路由鉤子函數(shù)有幾種?分別是什么?

        路由進(jìn)入組件之前調(diào)用,該鉤子在全局守衛(wèi) beforeEach 和路由守衛(wèi) beforeEnter 之后,全局 beforeResolve 和全局 afterEach 之前調(diào)用。

        參數(shù)包括 to,fromnext。

        該守衛(wèi)內(nèi)訪問不到組件的實(shí)例,也就是 thisundefined,也就是他在 beforeCreate 生命周期前觸發(fā)。

        beforeRouteUpdate

        vue路由鉤子函數(shù)有幾種?分別是什么?

        對(duì)于 beforeRouteUpdate 來(lái)說(shuō),this 已經(jīng)可用了,所以給 next 傳遞回調(diào)就沒有必要了。

        beforeRouteLeave

        vue路由鉤子函數(shù)有幾種?分別是什么?

        對(duì)于 beforeRouteLeave 來(lái)說(shuō),this 已經(jīng)可用了,所以給 next 傳遞回調(diào)就沒有必要了。

        總結(jié)

        完整的導(dǎo)航解析流程

        1. 導(dǎo)航被觸發(fā)。
        2. 在失活的組件里調(diào)用 beforeRouteLeave 守衛(wèi)。
        3. 調(diào)用全局的 beforeEach 守衛(wèi)。
        4. 在重用的組件里調(diào)用 beforeRouteUpdate 守衛(wèi)。
        5. 在路由配置里調(diào)用 beforeEnter
        6. 解析異步路由組件。
        7. 在被激活的組件里調(diào)用 beforeRouteEnter
        8. 調(diào)用全局的 beforeResolve 守衛(wèi)。
        9. 導(dǎo)航被確認(rèn)。
        10. 調(diào)用全局的 afterEach 鉤子。
        11. 觸發(fā) DOM 更新。
        12. 調(diào)用 beforeRouteEnter 守衛(wèi)中傳給 next 的回調(diào)函數(shù),創(chuàng)建好的組件實(shí)例會(huì)作為回調(diào)函數(shù)的參數(shù)傳入。

        上面是官方給出的答案,現(xiàn)在我們用流程圖來(lái)直觀的展示一下。

        vue路由鉤子函數(shù)有幾種?分別是什么?

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 国产成人精品视频播放| 国产精品无码一区二区在线 | 国产成人精品久久亚洲| 久久久久人妻精品一区二区三区 | 国产精品亚洲欧美一区麻豆| 在线观看国产精品普通话对白精品| 色综合久久精品中文字幕首页| 亚洲国产精品无码久久| 免费看一级毛片在线观看精品视频 | 国产精品久久久久久一区二区三区| 亚洲精品线路一在线观看| 国产精品一区三区| 四虎国产精品免费久久5151| 国产精品视频永久免费播放| 色国产精品一区在线观看| 香港aa三级久久三级老师2021国产三级精品三级在 | 91国内揄拍国内精品情侣对白 | 久久精品国产亚洲AV麻豆网站| 日韩精品欧美| 久久五月精品中文字幕| 国产精品无码久久综合网| 国产成人久久精品麻豆一区 | 亚洲国产精品无码久久久不卡| 日韩精品中文字幕第2页| 国产精品高清在线| www亚洲欲色成人久久精品| 国内精品51视频在线观看| 国产成人精品999在线观看| 日韩精品久久久久久久电影蜜臀| 一本一本久久a久久精品综合麻豆| 欧美精品三区| 亚洲AV无码之日韩精品| 亚洲国产91精品无码专区| 欧美精品亚洲精品日韩专区 | 国产麻豆精品久久一二三| 人妻AV一区二区三区精品| 嫖妓丰满肥熟妇在线精品| 日韩精品一区二区三区色欲AV| 无码人妻精品一区二区三| 漂亮人妻被黑人久久精品| 精品无码一区二区三区爱欲|