您好,登錄后才能下訂單哦!
本文章向大家介紹使用vue怎么實現一個頁面跳轉攔截器功能,主要包括使用vue怎么實現一個頁面跳轉攔截器功能的使用實例、應用技巧、基本知識點總結和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下。
Vue具體輕量級框架、簡單易學、雙向數據綁定、組件化、數據和結構的分離、虛擬DOM、運行速度快等優勢,Vue中頁面使用的是局部刷新,不用每次跳轉頁面都要請求所有數據和dom,可以大大提升訪問速度和用戶體驗。
登錄攔截邏輯
第一步:路由攔截
首先在定義路由的時候就需要多添加一個自定義字段requireAuth,用于判斷該路由的訪問是否需要登錄。如果用戶已經登錄,則順利進入路由, 否則就進入登錄頁面。在路由管理頁面添加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提供的鉤子函數beforeEach()對路由進行判斷。
所以在main.js加上
router.beforeEach((to, from, next) => { if (to.meta.requireAuth) { // 判斷該路由是否需要登錄權限 if (store.state.token) { // 通過vuex state獲取當前的token是否存在 next(); } else { next({ path: '/login', query: {redirect: to.fullPath} // 將跳轉的路由path作為參數,登錄成功后跳轉到該路由 }) } } else { next(); } })
每個鉤子方法接收三個參數:
* to: Route: 即將要進入的目標 路由對象
* from: Route: 當前導航正要離開的路由
* next: Function: 一定要調用該方法來 resolve 這個鉤子。執行效果依賴 next 方法的調用參數。
* next(): 進行管道中的下一個鉤子。如果全部鉤子執行完了,則導航的狀態就是 confirmed (確認的)。
* next(false): 中斷當前的導航。如果瀏覽器的 URL 改變了(可能是用戶手動或者瀏覽器后退按鈕),那么 URL 地址會重置到 from 路由對應的地址。
* next(‘/') 或者 next({ path: ‘/' }): 跳轉到一個不同的地址。當前的導航被中斷,然后進行一個新的導航。
確保要調用 next 方法,否則鉤子就不會被 resolved。
其中,to.meta中是我們自定義的數據,其中就包括我們剛剛定義的requireAuth字段。通過這個字段來判斷該路由是否需要登錄權限。需要的話,同時當前應用不存在token,則跳轉到登錄頁面,進行登錄。登錄成功后跳轉到目標路由。
完成后,我們可以在登錄頁面。控制用戶登錄成功后,vuex的token狀態改變就可以了
<script> export default { methods:{ login(){ this.$store.commit('setToken','true'); //改變token狀態 let redirect = decodeURIComponent(this.$route.query.redirect || '/'); 獲取登錄成功后要跳轉的路由。 this.$router.push({ path: redirect }) } } } </script>
到此這篇關于使用vue怎么實現一個頁面跳轉攔截器功能的文章就介紹到這了,更多相關的內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。