溫馨提示×

溫馨提示×

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

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

使用vue怎么實現(xiàn)一個頁面跳轉(zhuǎn)攔截器功能

發(fā)布時間:2021-02-23 15:32:15 來源:億速云 閱讀:309 作者:戴恩恩 欄目:web開發(fā)

本文章向大家介紹使用vue怎么實現(xiàn)一個頁面跳轉(zhuǎn)攔截器功能,主要包括使用vue怎么實現(xiàn)一個頁面跳轉(zhuǎn)攔截器功能的使用實例、應(yīng)用技巧、基本知識點總結(jié)和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下。

Vue的優(yōu)點

Vue具體輕量級框架、簡單易學、雙向數(shù)據(jù)綁定、組件化、數(shù)據(jù)和結(jié)構(gòu)的分離、虛擬DOM、運行速度快等優(yōu)勢,Vue中頁面使用的是局部刷新,不用每次跳轉(zhuǎn)頁面都要請求所有數(shù)據(jù)和dom,可以大大提升訪問速度和用戶體驗。

登錄攔截邏輯

第一步:路由攔截

首先在定義路由的時候就需要多添加一個自定義字段requireAuth,用于判斷該路由的訪問是否需要登錄。如果用戶已經(jīng)登錄,則順利進入路由, 否則就進入登錄頁面。在路由管理頁面添加meta字段

import Vue from 'vue'
import Router from 'vue-router'


Vue.use(Router)


const routes = [
 {
 path: '/',
 name: "歡迎",
 meta: {
   requireAuth: true, // 添加該字段,表示進入這個路由是需要登錄的
  },
 component: resolve => require(["../components/Hello.vue"], resolve)
 },
 {
 path: '/login',
 name: "登錄",
 /*meta: {
   requireAuth: false, // 添加該字段,表示進入這個路由是需要登錄的
  },*/
 component: resolve => require(["../view/login/login.vue"], resolve)
 }
]


export default new Router({
 base: "/",
 routes
})

定義完路由后,我們主要是利用vue-router提供的鉤子函數(shù)beforeEach()對路由進行判斷。

所以在main.js加上

router.beforeEach((to, from, next) => {
 if (to.meta.requireAuth) { // 判斷該路由是否需要登錄權(quán)限
  if (store.state.token) { // 通過vuex state獲取當前的token是否存在
   next();
  }
  else {
   next({
    path: '/login',
    query: {redirect: to.fullPath} // 將跳轉(zhuǎn)的路由path作為參數(shù),登錄成功后跳轉(zhuǎn)到該路由
   })
  }
 }
 else {
  next();
 }
})

每個鉤子方法接收三個參數(shù):

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

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

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

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

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

     * next(‘/') 或者 next({ path: ‘/' }): 跳轉(zhuǎn)到一個不同的地址。當前的導航被中斷,然后進行一個新的導航。

確保要調(diào)用 next 方法,否則鉤子就不會被 resolved。

其中,to.meta中是我們自定義的數(shù)據(jù),其中就包括我們剛剛定義的requireAuth字段。通過這個字段來判斷該路由是否需要登錄權(quán)限。需要的話,同時當前應(yīng)用不存在token,則跳轉(zhuǎn)到登錄頁面,進行登錄。登錄成功后跳轉(zhuǎn)到目標路由。

完成后,我們可以在登錄頁面??刂朴脩舻卿洺晒?vuex的token狀態(tài)改變就可以了

<script>
export default {
 methods:{
 login(){
  this.$store.commit('setToken','true');  //改變token狀態(tài)
  let redirect = decodeURIComponent(this.$route.query.redirect || '/'); 獲取登錄成功后要跳轉(zhuǎn)的路由。
  this.$router.push({
  path: redirect
  })
 }
 }
}
</script>

到此這篇關(guān)于使用vue怎么實現(xiàn)一個頁面跳轉(zhuǎn)攔截器功能的文章就介紹到這了,更多相關(guān)的內(nèi)容請搜索億速云以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持億速云!

向AI問一下細節(jié)

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

vue
AI