1. 程式人生 > 程式設計 >Vue2.x與Vue3.x中路由鉤子的區別詳解

Vue2.x與Vue3.x中路由鉤子的區別詳解

目錄
  • 2.x
    • 前置概念:
      • 路由鉤子分類
      • 路由和元件的概念(方便理解鉤子函式)
    • 全域性路由鉤子
      • 路由配置守衛鉤子
        • 元件內的守衛鉤子
          • 路由鉤子執行順序
            • eg: 從A元件跳轉到B元件順序
            • 如果B路有更新,每次都會執行以下三個鉤子:
        • vue3.x
          • 對比變化圖
            • 區別補充:

            vue2.x

            前置概念:

            路由鉤子分類

            一共分3類,7個鉤子

            Vue2.x與Vue3.x中路由鉤子的區別詳解

            路由和元件的概念(方便理解鉤子函式)

            路由和元件是2個概念,可以粗獷的認為:

            • 路由是瀏覽器網址
            • www.cppcns.com件是顯示在上的不同內容

            全域性路由鉤子

            router.beforeEach(to,from,next){ } 前置導航守衛

            路由進入前

            router.afterEach(to,next){ } 後置導航守衛

            路由進入後

            router.beforeResolve(to,next){ } 解析守衛

            Vue2.x與Vue3.x中路由鉤子的區別詳解

            解析元件時,已經讀取所有配置,前面的關卡都通過了,準備解析元件前執行

            路由配置守衛鉤子

            [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-iNt9TxY9-1631622860323)(C:\Users\hwm\AppData\Roaming\Typora\typora-user-images\image-20210914193901604.png)]

            beforeEnter() 在讀取路由配置資訊前呼叫

            在beforeCreate()前執行

            const router = new VueRouter({
              routes: [
                {
                  path: '/foo',component: Foo,beforeEnter: (to,next) => { }
                }
              ]
            })
            

            元件內的守衛鉤子

            beforeRouteEnter(to,next){ } 進入元件前

            預設不能獲取元件例項 this

            但是以下辦法可以訪問

            beforeRouteEnter(to,next){ 
            
              // next()的回撥函式,在進入路由,例項化執行
            	next(vm => {
                // vm等價於當前元件this
              })
            }
            

            beforeRouteUpdate(to,next){ } 修改元件前

            當前元件依然在使用路由地址改變滿足以上2個條件才會執行

            beforeRouteLeave(to,next){ } 離開元件前

            路由鉤子執行順序

            eg: 從A元件跳轉到B元件順序

            beforeRouteLeave() 先離開A元件

            beforeEach() 全域性-前置導航守衛

            beforeEnter() 讀取路由配置資訊前 (讀取B路由資訊)

            beforeRouteEnter() 進入元件前

            beforwww.cppcns.comeResolve() 解析守衛

            afterEach() 全域性-後置導航守衛

            如果B路有更新,每次都會執行以下三個鉤子:

            beforeEach() 全域性 - 前置導航守衛

            beforeResolve() 全域性 - 解析守衛

            beforeRouteUpdazFZqute() 元件內 - 修改元件前

            vue3.x

            vue3.x相對於vue2.x,只有小部分不同,此處只針對不同做講解

            對比變化圖

            請新增圖片描述

            區別補充:

            • 在Vue2.x中,有3個元件,如果A元件跳轉到B元件,B元件中存在子元件:

            B元件中的子元件不會觸發路由鉤子

            • 在Vue3.x中,B元件中存在子元件:

            B元件中的子元件會觸發路由鉤子: onBeforeRouteUpdate和onBeforeRouteLeave
            B元件中的子元件不會觸發路由鉤子

            • 在Vue3.x中,B元件中存在子元件:

            B元件中的子元件會觸發路由鉤子: onBeforeRouteUpdate和onBeforeRouteLeave

            以上就是Vue2.x與Vue3.x中路由鉤子的區別詳解的詳細內容,更多關於Vue2.x與Vue3.x中路由鉤子的區別的資料請關注我們其它相關文章!