vue中頁(yè)面跳轉(zhuǎn)攔截器的實(shí)現(xiàn)方法
本文主要給大家介紹的是關(guān)于vue頁(yè)面跳轉(zhuǎn)攔截器的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹:
登錄攔截邏輯
第一步:路由攔截
首先在定義路由的時(shí)候就需要多添加一個(gè)自定義字段requireAuth,用于判斷該路由的訪問是否需要登錄。如果用戶已經(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) { // 通過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)航正要離開的路由
* next: Function: 一定要調(diào)用該方法來 resolve 這個(gè)鉤子。執(zhí)行效果依賴 next 方法的調(diào)用參數(shù)。
* next(): 進(jìn)行管道中的下一個(gè)鉤子。如果全部鉤子執(zhí)行完了,則導(dǎo)航的狀態(tài)就是 confirmed (確認(rèn)的)。
* next(false): 中斷當(dāng)前的導(dǎo)航。如果瀏覽器的 URL 改變了(可能是用戶手動(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字段。通過這個(gè)字段來判斷該路由是否需要登錄權(quán)限。需要的話,同時(shí)當(dāng)前應(yīng)用不存在token,則跳轉(zhuǎn)到登錄頁(yè)面,進(jìn)行登錄。登錄成功后跳轉(zhuǎn)到目標(biāo)路由。
完成后,我們可以在登錄頁(yè)面。控制用戶登錄成功后,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í)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(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)畫效果的實(shí)現(xiàn)方法
相關(guān)文章
Vue3實(shí)現(xiàn)粒子動(dòng)態(tài)背景的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Vue3實(shí)現(xiàn)粒子動(dòng)態(tài)背景,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下2023-11-11VuePress在build打包時(shí)window?document?is?not?defined問題解決
這篇文章主要為大家介紹了VuePress在build打包時(shí)window?document?is?not?defined問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07vue大型項(xiàng)目之分模塊運(yùn)行/打包的實(shí)現(xiàn)
這篇文章主要介紹了vue大型項(xiàng)目之分模塊運(yùn)行/打包的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09vue實(shí)現(xiàn)圖片預(yù)覽組件封裝與使用
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)圖片預(yù)覽組件封裝與使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07vue2的todolist入門小項(xiàng)目的詳細(xì)解析
本篇文章主要介紹了vue2的todolist入門小項(xiàng)目的詳細(xì)解析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05Vue3 SFC 和 TSX 方式自定義組件實(shí)現(xiàn) v-model的詳細(xì)
v-model 是 vue3 中的一個(gè)內(nèi)置指令,很多表單元素都可以使用這個(gè)屬性,如 input、checkbox 等,咱可以在自定義組件中實(shí)現(xiàn) v-model,這篇文章主要介紹了Vue3 SFC 和 TSX 方式自定義組件實(shí)現(xiàn) v-model,需要的朋友可以參考下2022-10-10vue打包c(diǎn)hunk-vendors.js文件過大導(dǎo)致頁(yè)面加載緩慢的解決
這篇文章主要介紹了vue打包c(diǎn)hunk-vendors.js文件過大導(dǎo)致頁(yè)面加載緩慢的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04