搜尋
首頁web前端Vue.jsVue3中的導航守衛如何使用

Vue3中的導航守衛如何使用

May 16, 2023 pm 06:58 PM
vue3

    一、什麼是導航守衛?

    如其名,vue-router 提供的導航守衛主要用來透過跳轉或取消的方式守衛導航。這裡有很多方式植入路由導航中:全域的,單一路由獨享的,或是元件級的。

    查看以下情形:

    預設情況下,點選主頁連結可直接進入指定介面,但是該介面是需要使用者登入後方可存取的,這是個問題

    Vue3中的導航守衛如何使用

    可設定導航守衛來偵測使用者是否登錄,如果已登錄,則進入背景頁,如果未登錄,則強制進入登入頁,如圖

    Vue3中的導航守衛如何使用

    二、導航守衛有哪幾種?

    1、全域守衛(3個)

    全域前置守衛

    每次發生路由的導覽跳轉時,都會觸發全域前置守衛,因此,在全域前置守衛中,程式設計師可以對每個路由進行存取權限的控制

    #1、 使用方式

    你可以在router/index.js 頁面中使用router.beforeEach((to, from, next) => {}) 註冊一個全域前置守衛。

    2、 程式碼:

    // router/index.js 页面
    
    router.beforeEach((to, from, next) => {
        console.log(to, from);
        next()
    });
    全域解析守衛
    1、 使用方式
    你可以用 router.beforeResolve 註冊一個全域守衛。這和 router.beforeEach 類似,因為它在 每次導航時都會觸發,但是確保在導航被確認之前,同時在所有組件內守衛和異步路由組件被解析之後,解析守衛就被正確調用。

    2、 程式碼:

    // router/index.js 页面
    
    router.beforeResolve((to, from, next) => {
        console.log(to,from);
        next()
    })
    全域後置鉤子
    1、 使用方式
    你也可以註冊全域後置鉤子,然而和守衛不同的是,這些鉤子不會接受next 函數也不會改變導航本身:

    2、 程式碼:

    // router/index.js 页面
    
    router.afterEach((to, from) => {
        console.log(to,from);
    })

    它們對於分析、更改頁面標題、聲明頁面等輔助功能以及許多其他事情都很有用。

    2、路由獨享守衛(1個)

    1、 使用方式

    你可以直接在路由設定上定義beforeEnter 守衛:

    2、 程式碼:

    // router/index.js 页面(路由规则中)
    
    const routes = [
    	{
    	    path: '/home',
    	    name: 'Home',
    	    component: HomeView,
    	    beforeEnter: (to, from,next) => {
    	        console.log(to, from);
    	        next()
    	    },
    	}, 
    ]

    3、元件內守衛(3個)

    元件內守衛有三個:路由進入之前beforeRouteEnter,路由離開時beforeRouteLeave,頁面更新時beforeRouteUpdate

    beforeRouteEnter(to, from, next)

    1、使用方式
    在元件範本中使用,跟methods: {}等同等級書寫,元件路由守衛是寫在每個單獨的vue檔案裡面的路由守衛

    2、程式碼:

    // vue 组件内使用
    
    onBeforeRouteUpdate((to, from) => {
      //当前组件路由改变后,进行触发
      console.log(to);
    });
    注意:在vue3中的setup 函數中是不可以使用beforeRouterEnter 這個路由守衛的

    beforeRouteUpdate(to, from, next)

    1、 使用方式
    在元件模板中使用,跟methods: {} 等同層級書寫,元件路由守衛是寫在每個單獨的vue 檔案裡面的路由守衛

    #2、 程式碼:

    // vue 组件内使用
    
    onBeforeRouteUpdate((to, from) => {
      //当前组件路由改变后,进行触发
      console.log(to);
    });

    beforeRouteLeave(to, from, next)

    1、 使用方式在元件範本中使用, 跟methods: {} 等同等級書寫,元件路由守衛是寫在每個單獨的vue 檔案裡面的路由守衛

    2、 程式碼:

    // vue 组件内使用
    
    onBeforeRouteLeave((to, from) => {
      //离开当前的组件,触发
      alert("我离开啦");
    });

    三、導航守衛的三個參數

    • to:將要存取的路由資訊物件

    • from:將要離開的路由資訊物件

    • next:函數

      呼叫next()表示放行,允許這次路由導航

      呼叫next(false)表示不放行,不允許此路由導航

      呼叫next({routerPath})表示導覽至此位址,一般狀況使用者未登入時,會導覽至登陸介面

    提示:函數在導覽守衛中可出現多次,但只能被呼叫一次!!!

    Vue3中的導航守衛如何使用

    四、如何在vue3 中使用beforeRouteEnter

    #如果你正在使用組合API 和setup 函數來編寫元件,你可以透過onBeforeRouteUpdate 和onBeforeRouteLeave 分別加入update 和leave 守衛。請參考組合 API 部分以獲得更多細節。

    請看vue-router的官方文件
    導航守衛| Vue Router

    方法一、我們可以在設定路由的時候,使用beforeEnter方法攔截,也就是在router.js中:

    {
    	path: '/',
    	name: 'home
    	component: () => import('@/xxx.vue'),
    	beforeEnter: (to, from) => {
    		// 可以在定义路由的时候监听from和to
    	}
    }

    方法二、我們還可以使用vue2的寫法,使用選項式api,就可以使用beforeRouterEnter這個鉤子了

    <script>
    export default {
    	beforeRouteEnter(to, from) {
    		console.log(&#39;before router enter&#39;, to, from)
    	},
    	mounted() {
    		console.log(&#39;mounted&#39;)
    	},
    }

    五、模擬登入註冊案例

    // 模拟是否登录(true为登录,false为未登录)
    let token = true
    router.beforeEach((to, from, next) => {
        // 判断有没有登录
        if (!token) {
        	// 如果没有登录,并且是跳转至登录页
            if (to.name == "Login") {
            	// 直接跳转
                next();
            } else {
            	// 否则直接强制跳转至登录页
                router.push(&#39;/login&#39;)
            }
        } else {
        	// 如果已经登录,并且不是跳转至登录页
            if (to.name !== "Login") {
            	// 直接跳转
                next();
            } else {
            	// 否则直接强制跳转至上一个页面
                router.push(from.path)
            }
        }
    });

    以上是Vue3中的導航守衛如何使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述
    本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
    VUE.JS與React:比較性能和效率VUE.JS與React:比較性能和效率Apr 28, 2025 am 12:12 AM

    Vue.js和React各有優勢:Vue.js適用於小型應用和快速開發,React適合大型應用和復雜狀態管理。 1.Vue.js通過響應式系統實現自動更新,適用於小型應用。 2.React使用虛擬DOM和diff算法,適合大型和復雜應用。選擇框架時需考慮項目需求和團隊技術棧。

    vue.js vs.反應:社區,生態系統和支持vue.js vs.反應:社區,生態系統和支持Apr 27, 2025 am 12:24 AM

    Vue.js和React各有優勢,選擇應基於項目需求和團隊技術棧。 1.Vue.js社區友好,提供豐富學習資源,生態系統包括VueRouter等官方工具,支持由官方團隊和社區提供。 2.React社區偏向企業應用,生態系統強大,支持由Facebook及其社區提供,更新頻繁。

    React和Netflix:探索關係React和Netflix:探索關係Apr 26, 2025 am 12:11 AM

    Netflix使用React來提升用戶體驗。 1)React的組件化特性幫助Netflix將復雜UI拆分成可管理模塊。 2)虛擬DOM優化了UI更新,提高了性能。 3)結合Redux和GraphQL,Netflix高效管理應用狀態和數據流動。

    vue.js vs.後端框架:澄清區別vue.js vs.後端框架:澄清區別Apr 25, 2025 am 12:05 AM

    Vue.js是前端框架,後端框架用於處理服務器端邏輯。 1)Vue.js專注於構建用戶界面,通過組件化和響應式數據綁定簡化開發。 2)後端框架如Express、Django處理HTTP請求、數據庫操作和業務邏輯,運行在服務器上。

    vue.js和前端堆棧:了解連接vue.js和前端堆棧:了解連接Apr 24, 2025 am 12:19 AM

    Vue.js與前端技術棧緊密集成,提升開發效率和用戶體驗。 1)構建工具:與Webpack、Rollup集成,實現模塊化開發。 2)狀態管理:與Vuex集成,管理複雜應用狀態。 3)路由:與VueRouter集成,實現單頁面應用路由。 4)CSS預處理器:支持Sass、Less,提升樣式開發效率。

    Netflix:探索React(或其他框架)的使用Netflix:探索React(或其他框架)的使用Apr 23, 2025 am 12:02 AM

    Netflix選擇React來構建其用戶界面,因為React的組件化設計和虛擬DOM機制能夠高效處理複雜界面和頻繁更新。 1)組件化設計讓Netflix將界面分解成可管理的小組件,提高了開發效率和代碼可維護性。 2)虛擬DOM機制通過最小化DOM操作,確保了Netflix用戶界面的流暢性和高性能。

    vue.js和前端:深入研究框架vue.js和前端:深入研究框架Apr 22, 2025 am 12:04 AM

    Vue.js被開發者喜愛因為它易於上手且功能強大。 1)其響應式數據綁定係統自動更新視圖。 2)組件系統提高了代碼的可重用性和可維護性。 3)計算屬性和偵聽器增強了代碼的可讀性和性能。 4)使用VueDevtools和檢查控制台錯誤是常見的調試技巧。 5)性能優化包括使用key屬性、計算屬性和keep-alive組件。 6)最佳實踐包括清晰的組件命名、使用單文件組件和合理使用生命週期鉤子。

    vue.js在前端的力量:關鍵特徵和好處vue.js在前端的力量:關鍵特徵和好處Apr 21, 2025 am 12:07 AM

    Vue.js是一個漸進式的JavaScript框架,適用於構建高效、可維護的前端應用。其關鍵特性包括:1.響應式數據綁定,2.組件化開發,3.虛擬DOM。通過這些特性,Vue.js簡化了開發過程,提高了應用性能和可維護性,使其在現代Web開發中備受歡迎。

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅動的應用程序,用於創建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    mPDF

    mPDF

    mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

    WebStorm Mac版

    WebStorm Mac版

    好用的JavaScript開發工具

    SAP NetWeaver Server Adapter for Eclipse

    SAP NetWeaver Server Adapter for Eclipse

    將Eclipse與SAP NetWeaver應用伺服器整合。

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    VSCode Windows 64位元 下載

    VSCode Windows 64位元 下載

    微軟推出的免費、功能強大的一款IDE編輯器