中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue路由守衛及路由守衛無限循環問題怎么解決

發布時間:2022-11-08 09:23:47 來源:億速云 閱讀:156 作者:iii 欄目:大數據

這篇“vue路由守衛及路由守衛無限循環問題怎么解決”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“vue路由守衛及路由守衛無限循環問題怎么解決”文章吧。

先貼一波官方文檔的內容

const router = new VueRouter({ ... })

router.beforeEach((to, from, next) => {
 // ...
})

當一個導航觸發時,全局前置守衛按照創建順序調用。守衛是異步解析執行,此時導航在所有守衛 resolve 完之前一直處于 等待中。

每個守衛方法接收三個參數:

  • to: Route: 即將要進入的目標 路由對象

  • from: Route: 當前導航正要離開的路由

  • next: Function: 一定要調用該方法來 resolve 這個鉤子。執行效果依賴 next 方法的調用參數。

    • next(): 進行管道中的下一個鉤子。如果全部鉤子執行完了,則導航的狀態就是 confirmed (確認的)。

    • next(false): 中斷當前的導航。如果瀏覽器的 URL 改變了 (可能是用戶手動或者瀏覽器后退按鈕),那么 URL 地址會重置到 from 路由對應的地址。

    • next('/') 或者 next({ path: '/' }): 跳轉到一個不同的地址。當前的導航被中斷,然后進行一個新的導航。你可以向 next 傳遞任意位置對象,且允許設置諸如 replace: true、name: 'home' 之類的選項以及任何用在 router-link 的 to prop 或 router.push 中的選項。

    • next(error): (2.4.0+) 如果傳入 next 的參數是一個 Error 實例,則導航會被終止且該錯誤會被傳遞給 router.onError() 注冊過的回調。確保要調用 next 方法,否則鉤子就不會被 resolved

然后這是我自己的總結

import Vue from 'vue'
import Router from 'vue-router'
import Login from '@/pages/login/Login'
import Index from '../pages/index/Index'
import Library from '../pages/library/Library'
import Design from '../pages/design/Design'
import Administration from '../pages/administration/Administration'
import Production from '../pages/production/Production'

import Global from '../common/global/Global'

Vue.use(Router)

const router = new Router({
 routes: [
 {
  path: '/',
  name: 'login',
  component: Login
 }, {
  path: '/index',
  name: 'index',
  component: Index
 }, {
  path: '/library',
  name: 'library',
  component: Library
 }, {
  path: '/design',
  name: 'design',
  component: Design
 }, {
  path: '/administration',
  name: 'administration',
  component: Administration
 }, {
  path: '/production',
  name: 'production',
  component: Production
 }
 ]
})

router.beforeEach ((to,from,next) => {
 //將所有需要登陸才顯示的頁面的路由都放進一個數組
 const nextRoute = ['index', 'library', 'design', 'administration', 'production'];
 //獲取登陸狀態
 let isLogin = Global.isLogin
 
 if(to.name === 'login') { //如果是登錄頁,則跳過驗證
 next() //必不可少
 return //以下的代碼不執行
 }
 if(nextRoute.indexOf(to.name) >= 0) { //判斷該頁面是否需要登陸
 if(!isLogin) { //判斷登陸狀態
  next({ name : 'login'}) //如果未登錄,則跳轉到登錄頁
 } else {
  next() //如果已經登陸,那就可以跳轉
 }
 } else { //其他的無需登陸的頁面不做驗證
  next()
 }
 
})

export default router

這樣就實現了全局路由守衛

關于路由守衛無限循環問題

如果你的代碼是這樣

 if(isLogin) {
 next()
 } else {
 next({ name: 'login')}
 }

這樣的話就會陷入無限循環

因為你的   next({ name: 'login')} 是相當于一個路由跳轉,它會再次觸發全局路由守衛,你又進入了全局路由守衛進行再次判斷,如此循環。

所以,想要結束路由守衛,整段代碼的邏輯必須由 next() 進行結尾。比如像我上面寫的,當需要進入登錄頁的時候,

 if(to.name === 'login') { 
 next() 
 return 
 }

加上這個判斷,當你進入登錄頁的時候也會調用next() , 路由守衛進入確認狀態,路由才會進行跳轉。

vue是什么

Vue是一套用于構建用戶界面的漸進式JavaScript框架,Vue與其它大型框架的區別是,使用Vue可以自底向上逐層應用,其核心庫只關注視圖層,方便與第三方庫和項目整合,且使用Vue可以采用單文件組件和Vue生態系統支持的庫開發復雜的單頁應用。

以上就是關于“vue路由守衛及路由守衛無限循環問題怎么解決”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

襄垣县| 庆云县| 景谷| 寻乌县| 乐业县| 长宁区| 张家港市| 泗阳县| 新化县| 丰顺县| 大城县| 莎车县| 佛山市| 花莲县| 阜城县| 临湘市| 尉犁县| 岑溪市| 共和县| 泰顺县| 洛宁县| 偃师市| 兴仁县| 榆社县| 吉林市| 临潭县| 灵宝市| 太仓市| 湟中县| 太康县| 漳浦县| 龙江县| 阿鲁科尔沁旗| 安顺市| 娱乐| 胶南市| 尉犁县| 太原市| 静海县| 同仁县| 晋江市|