vue中頁(yè)面跳轉(zhuǎn)攔截器的實(shí)現(xiàn)方法
本文主要給大家介紹的是關(guān)于vue頁(yè)面跳轉(zhuǎn)攔截器的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹:
登錄攔截邏輯
第一步:路由攔截
首先在定義路由的時(shí)候就需要多添加一個(gè)自定義字段requireAuth,用于判斷該路由的訪問(wèn)是否需要登錄。如果用戶(hù)已經(jīng)登錄,則順利進(jìn)入路由, 否則就進(jìn)入登錄頁(yè)面。在路由管理頁(yè)面添加meta字段
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
const routes = [
{
path: '/',
name: "歡迎",
meta: {
requireAuth: true, // 添加該字段,表示進(jìn)入這個(gè)路由是需要登錄的
},
component: resolve => require(["../components/Hello.vue"], resolve)
},
{
path: '/login',
name: "登錄",
/*meta: {
requireAuth: false, // 添加該字段,表示進(jìn)入這個(gè)路由是需要登錄的
},*/
component: resolve => require(["../view/login/login.vue"], resolve)
}
]
export default new Router({
base: "/",
routes
})
定義完路由后,我們主要是利用vue-router提供的鉤子函數(shù)beforeEach()對(duì)路由進(jìn)行判斷。
所以在main.js加上
router.beforeEach((to, from, next) => {
if (to.meta.requireAuth) { // 判斷該路由是否需要登錄權(quán)限
if (store.state.token) { // 通過(guò)vuex state獲取當(dāng)前的token是否存在
next();
}
else {
next({
path: '/login',
query: {redirect: to.fullPath} // 將跳轉(zhuǎn)的路由path作為參數(shù),登錄成功后跳轉(zhuǎn)到該路由
})
}
}
else {
next();
}
})
每個(gè)鉤子方法接收三個(gè)參數(shù):
* to: Route: 即將要進(jìn)入的目標(biāo) 路由對(duì)象
* from: Route: 當(dāng)前導(dǎo)航正要離開(kāi)的路由
* next: Function: 一定要調(diào)用該方法來(lái) resolve 這個(gè)鉤子。執(zhí)行效果依賴(lài) next 方法的調(diào)用參數(shù)。
* next(): 進(jìn)行管道中的下一個(gè)鉤子。如果全部鉤子執(zhí)行完了,則導(dǎo)航的狀態(tài)就是 confirmed (確認(rèn)的)。
* next(false): 中斷當(dāng)前的導(dǎo)航。如果瀏覽器的 URL 改變了(可能是用戶(hù)手動(dòng)或者瀏覽器后退按鈕),那么 URL 地址會(huì)重置到 from 路由對(duì)應(yīng)的地址。
* next(‘/') 或者 next({ path: ‘/' }): 跳轉(zhuǎn)到一個(gè)不同的地址。當(dāng)前的導(dǎo)航被中斷,然后進(jìn)行一個(gè)新的導(dǎo)航。
確保要調(diào)用 next 方法,否則鉤子就不會(huì)被 resolved。
其中,to.meta中是我們自定義的數(shù)據(jù),其中就包括我們剛剛定義的requireAuth字段。通過(guò)這個(gè)字段來(lái)判斷該路由是否需要登錄權(quán)限。需要的話,同時(shí)當(dāng)前應(yīng)用不存在token,則跳轉(zhuǎn)到登錄頁(yè)面,進(jìn)行登錄。登錄成功后跳轉(zhuǎn)到目標(biāo)路由。
完成后,我們可以在登錄頁(yè)面。控制用戶(hù)登錄成功后,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>
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- Vue.js實(shí)戰(zhàn)之利用vue-router實(shí)現(xiàn)跳轉(zhuǎn)頁(yè)面
- vue-router跳轉(zhuǎn)頁(yè)面的方法
- vue實(shí)現(xiàn)登錄后頁(yè)面跳轉(zhuǎn)到之前頁(yè)面
- Vue-router路由判斷頁(yè)面未登錄跳轉(zhuǎn)到登錄頁(yè)面的實(shí)例
- vue頁(yè)面跳轉(zhuǎn)后返回原頁(yè)面初始位置方法
- 詳解刷新頁(yè)面vuex數(shù)據(jù)不消失和不跳轉(zhuǎn)頁(yè)面的解決
- vue路由攔截及頁(yè)面跳轉(zhuǎn)的設(shè)置方法
- Vue 頁(yè)面跳轉(zhuǎn)不用router-link的實(shí)現(xiàn)代碼
- mpvue跳轉(zhuǎn)頁(yè)面及注意事項(xiàng)
- Vue頁(yè)面跳轉(zhuǎn)動(dòng)畫(huà)效果的實(shí)現(xiàn)方法
相關(guān)文章
vue如何監(jiān)聽(tīng)對(duì)象或者數(shù)組某個(gè)屬性的變化詳解
這篇文章主要給大家介紹了關(guān)于vue如何監(jiān)聽(tīng)對(duì)象或者數(shù)組某個(gè)屬性的變化,在Vue.js中可以通過(guò)watch監(jiān)聽(tīng)屬性變化并動(dòng)態(tài)修改其他屬性的值,watch通過(guò)監(jiān)聽(tīng)器函數(shù)接收新舊值,實(shí)現(xiàn)屬性間的數(shù)據(jù)聯(lián)動(dòng),需要的朋友可以參考下2024-12-12
解決vue打包報(bào)錯(cuò)Unexpected token: punc的問(wèn)題
這篇文章主要介紹了解決vue打包報(bào)錯(cuò)Unexpected token: punc的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10
Vue2/3?登錄后用戶(hù)無(wú)操作半小時(shí)后自動(dòng)清除登錄信息退出登錄下線(示例代碼)
這篇文章主要介紹了Vue2/3?登錄后用戶(hù)無(wú)操作半小時(shí)后自動(dòng)清除登錄信息退出登錄下線,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
Vue項(xiàng)目開(kāi)發(fā)常見(jiàn)問(wèn)題和解決方案總結(jié)
這篇文章主要介紹了Vue項(xiàng)目開(kāi)發(fā)常見(jiàn)問(wèn)題和解決方案總結(jié),幫助大家更好的利用vue開(kāi)發(fā),感興趣的朋友可以了解下2020-09-09
vue2+elementUI實(shí)現(xiàn)下拉樹(shù)形多選框效果實(shí)例
這篇文章主要給大家介紹了關(guān)于vue2+elementUI實(shí)現(xiàn)下拉樹(shù)形多選框效果的相關(guān)資料,這是最近的工作中遇到的一個(gè)需求,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
webpack搭建vue環(huán)境時(shí)報(bào)錯(cuò)異常解決
這篇文章主要介紹了webpack搭建vue環(huán)境時(shí)報(bào)錯(cuò)異常解決,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09
Vue路由組件的緩存keep-alive和include屬性的具體使用
:瀏覽器頁(yè)面在進(jìn)行切換時(shí),原有的路由組件會(huì)被銷(xiāo)毀,通過(guò)緩存可以保存被切換的路由組件,本文主要介紹了Vue路由組件的緩存keep-alive和include屬性的具體使用,感興趣的可以了解一下2023-11-11

