中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

怎么解決vue路由守衛(wèi)及路由守衛(wèi)無限循環(huán)問題

這篇文章主要講解了“怎么解決vue路由守衛(wèi)及路由守衛(wèi)無限循環(huán)問題”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么解決vue路由守衛(wèi)及路由守衛(wèi)無限循環(huán)問題”吧!

我們提供的服務(wù)有:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、京口ssl等。為上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的京口網(wǎng)站制作公司

先貼一波官方文檔的內(nèi)容

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

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

當一個導(dǎo)航觸發(fā)時,全局前置守衛(wèi)按照創(chuàng)建順序調(diào)用。守衛(wèi)是異步解析執(zhí)行,此時導(dǎo)航在所有守衛(wèi) resolve 完之前一直處于 等待中。

每個守衛(wèi)方法接收三個參數(shù):

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

  • from: Route: 當前導(dǎo)航正要離開的路由

  • next: Function: 一定要調(diào)用該方法來 resolve 這個鉤子。執(zhí)行效果依賴 next 方法的調(diào)用參數(shù)。

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

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

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

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

然后這是我自己的總結(jié)

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

export default router

這樣就實現(xiàn)了全局路由守衛(wèi)

關(guān)于路由守衛(wèi)無限循環(huán)問題

如果你的代碼是這樣

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

這樣的話就會陷入無限循環(huán)

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

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

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

加上這個判斷,當你進入登錄頁的時候也會調(diào)用next() , 路由守衛(wèi)進入確認狀態(tài),路由才會進行跳轉(zhuǎn)。

感謝各位的閱讀,以上就是“怎么解決vue路由守衛(wèi)及路由守衛(wèi)無限循環(huán)問題”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對怎么解決vue路由守衛(wèi)及路由守衛(wèi)無限循環(huán)問題這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

文章標題:怎么解決vue路由守衛(wèi)及路由守衛(wèi)無限循環(huán)問題
標題URL:http://www.rwnh.cn/article16/jijpgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、全網(wǎng)營銷推廣、定制開發(fā)、App開發(fā)、定制網(wǎng)站App設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
绥江县| 九江市| 东乡县| 噶尔县| 华阴市| 察哈| 泽库县| 宜宾市| 华池县| 田林县| 东明县| 通辽市| 满洲里市| 息烽县| 波密县| 钟山县| 麻城市| 通榆县| 闵行区| 林甸县| 晋宁县| 高台县| 光泽县| 满洲里市| 慈溪市| 崇左市| 浠水县| 南部县| 佳木斯市| 灌阳县| 宝兴县| 亳州市| 合肥市| 高唐县| 桑植县| 孙吴县| 彰武县| 兰州市| 双柏县| 景德镇市| 临湘市|