亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue實(shí)現(xiàn)路由守衛(wèi)的示例代碼

 更新時(shí)間:2025年09月25日 08:30:55   作者:一只游魚(yú)  
Vue路由守衛(wèi)是控制頁(yè)面導(dǎo)航的鉤子函數(shù),主要用于鑒權(quán)、數(shù)據(jù)預(yù)加載等場(chǎng)景,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、概念

路由守衛(wèi)(Navigation Guards)本質(zhì)上就是 在路由跳轉(zhuǎn)前后,攔截用戶導(dǎo)航并做一些邏輯處理的鉤子函數(shù)
常見(jiàn)用途有:

  • 鑒權(quán)控制:比如沒(méi)有登錄就不允許進(jìn)入某些頁(yè)面。
  • 數(shù)據(jù)預(yù)加載:在進(jìn)入某個(gè)頁(yè)面前,提前拉取數(shù)據(jù)。
  • 頁(yè)面跳轉(zhuǎn)控制:比如離開(kāi)頁(yè)面前彈出“是否保存更改”的提示。

簡(jiǎn)單理解:路由守衛(wèi)就是 Vue Router 提供的一種“鉤子函數(shù)”,用來(lái)控制頁(yè)面導(dǎo)航的行為。

二、類型

Vue Router 提供了三類守衛(wèi):

(1)全局守衛(wèi)

對(duì)所有路由跳轉(zhuǎn)都生效。

// 全局前置守衛(wèi)
router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('token')
  if (to.meta.requiresAuth && !token) {
    // 需要登錄,但沒(méi) token,跳轉(zhuǎn)到登錄
    next('/login')
  } else {
    next()
  }
})
// 全局后置守衛(wèi)(一般用來(lái)修改標(biāo)題等)
router.afterEach((to) => {
  document.title = to.meta.title || '默認(rèn)標(biāo)題'
})
export default router

(2)路由獨(dú)享守衛(wèi)

只針對(duì)某一個(gè)路由生效。

{
  path: '/profile',
  component: () => import('@/views/Profile.vue'),
  beforeEnter: (to, from, next) => {
    const token = localStorage.getItem('token')
    if (!token) {
      next('/login')
    } else {
      next()
    }
  }
}

(3)組件內(nèi)守衛(wèi)

直接寫(xiě)在組件里,對(duì)進(jìn)入/離開(kāi)當(dāng)前組件生效。

export default {
  name: 'Profile',
  // 進(jìn)入當(dāng)前組件之前
  beforeRouteEnter(to, from, next) {
    console.log('即將進(jìn)入 Profile 頁(yè)面')
    next()
  },
  // 路由更新(比如 /profile/1 -> /profile/2)
  beforeRouteUpdate(to, from, next) {
    console.log('路由參數(shù)變化,更新頁(yè)面數(shù)據(jù)')
    next()
  },
  // 離開(kāi)當(dāng)前組件時(shí)
  beforeRouteLeave(to, from, next) {
    const answer = window.confirm('確定要離開(kāi)嗎?未保存的數(shù)據(jù)會(huì)丟失')
    if (answer) {
      next()
    } else {
      next(false) // 阻止導(dǎo)航
    }
  }
}

三、實(shí)戰(zhàn)

以下為作者的演示:

  1. 全局守衛(wèi)
  2. 如果token過(guò)期或token錯(cuò)誤會(huì)返回到登錄頁(yè)面

注意:以上效果需要配合JWT來(lái)實(shí)現(xiàn),詳情請(qǐng)看我的博客文章:

JWT令牌

在index.Js文件中寫(xiě)入全局守衛(wèi):

// 全局前置守衛(wèi)
router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('token') // 從本地取 token
  if (to.meta.requiresAuth && !token) {
    // 如果需要登錄且沒(méi)有 token,就跳到登錄頁(yè)
    next({ path: '/' })
  } else {
    next() // 其他情況放行
  }
})

在request.Js中添加攔截器:

// 響應(yīng)攔截器:統(tǒng)一處理 401
request.interceptors.response.use(
  (response) => response,
  (error) => {
    if (error.response && error.response.status === 401) {
      localStorage.removeItem("token"); // 清除過(guò)期 token
      router.push("/"); // 跳轉(zhuǎn)到登錄頁(yè)
    }
    return Promise.reject(error);
  }
);

可以試驗(yàn)一下,登錄成功進(jìn)入ai頁(yè)面后:

打開(kāi)F12,打開(kāi)本地存儲(chǔ),將token刪除,回到頁(yè)面,并刷新。。

這時(shí)當(dāng)前端發(fā)送的請(qǐng)求頭不帶token令牌時(shí),后端會(huì)返回401,,axois攔截器會(huì)攔截到并且退回登錄頁(yè)面:

到此這篇關(guān)于Vue實(shí)現(xiàn)路由守衛(wèi)的示例代碼的文章就介紹到這了,更多相關(guān)Vue 路由守衛(wèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue通過(guò)axios調(diào)用json地址數(shù)據(jù)的方法

    Vue通過(guò)axios調(diào)用json地址數(shù)據(jù)的方法

    在現(xiàn)代Web開(kāi)發(fā)中,前后端分離已成為標(biāo)準(zhǔn)做法,Vue.js作為前端框架中的佼佼者,提供了豐富的API來(lái)處理數(shù)據(jù)和服務(wù)端的交互,其中一個(gè)常用的庫(kù)是axios,本文將詳細(xì)介紹如何在Vue項(xiàng)目中使用axios來(lái)調(diào)用JSON數(shù)據(jù),需要的朋友可以參考下
    2024-09-09
  • vue頁(yè)面圖片不顯示問(wèn)題解決方案

    vue頁(yè)面圖片不顯示問(wèn)題解決方案

    這篇文章主要介紹了vue頁(yè)面圖片不顯示問(wèn)題解決方案,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Vue.set()實(shí)現(xiàn)數(shù)據(jù)動(dòng)態(tài)響應(yīng)的方法

    Vue.set()實(shí)現(xiàn)數(shù)據(jù)動(dòng)態(tài)響應(yīng)的方法

    這篇文章主要介紹了Vue.set()實(shí)現(xiàn)數(shù)據(jù)動(dòng)態(tài)響應(yīng)的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Vue實(shí)現(xiàn)帶參數(shù)的自定義指令示例

    Vue實(shí)現(xiàn)帶參數(shù)的自定義指令示例

    這篇文章主要為大家介紹了Vue實(shí)現(xiàn)帶參數(shù)的自定義指令示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • vue.js利用Object.defineProperty實(shí)現(xiàn)雙向綁定

    vue.js利用Object.defineProperty實(shí)現(xiàn)雙向綁定

    這篇文章主要為大家詳細(xì)介紹了vue.js利用Object.defineProperty實(shí)現(xiàn)雙向綁定,幫大家解析神秘的Object.defineProperty方法
    2017-03-03
  • 使用 Vue 3 的 createApp方法初始化應(yīng)用的基本步驟

    使用 Vue 3 的 createApp方法初始化應(yīng)用的基本步驟

    createApp 是 Vue 3 引入的全局 API,用于創(chuàng)建一個(gè)應(yīng)用實(shí)例,這篇文章主要介紹了如何使用 Vue 3 的 createApp方法初始化應(yīng)用,通過(guò) createApp 方法,我們從 Vue 3 的基本初始化開(kāi)始,擴(kuò)展到插件的應(yīng)用、多個(gè)應(yīng)用實(shí)例的創(chuàng)建等,需要的朋友可以參考下
    2024-05-05
  • 淺析vue數(shù)據(jù)綁定

    淺析vue數(shù)據(jù)綁定

    本文主要介紹了vue數(shù)據(jù)綁定的相關(guān)知識(shí),具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • Vue封裝Swiper實(shí)現(xiàn)圖片輪播效果

    Vue封裝Swiper實(shí)現(xiàn)圖片輪播效果

    圖片輪播是前端中經(jīng)常需要實(shí)現(xiàn)的一個(gè)功能。最近學(xué)習(xí)Vue.js,就針對(duì)Swiper進(jìn)行封裝,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的圖片輪播組件。感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-02-02
  • 基于vue3+antDesign2+echarts?實(shí)現(xiàn)雷達(dá)圖效果

    基于vue3+antDesign2+echarts?實(shí)現(xiàn)雷達(dá)圖效果

    這篇文章主要介紹了基于vue3+antDesign2+echarts?實(shí)現(xiàn)雷達(dá)圖,本文通過(guò)實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • Vue父子組件元素獲取方法互相調(diào)用示例詳解

    Vue父子組件元素獲取方法互相調(diào)用示例詳解

    這篇文章主要為大家介紹了Vue父子組件元素獲取方法互相調(diào)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09

最新評(píng)論