vue中路由驗(yàn)證和相應(yīng)攔截的使用詳解
在web項(xiàng)目中,經(jīng)常需要根據(jù)是否登錄進(jìn)行路由的驗(yàn)證和相應(yīng)的攔截。
首先,在vuex里的store.js里邊寫(xiě)一個(gè)存放登錄狀態(tài),代碼如下
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
user: false
},
mutations: {
// 登錄
login (state, user) {
state.user = user
},
// 退出
logout (state, user) {
state.user = false
}
}
})
路由驗(yàn)證:
路由驗(yàn)證用 router.beforeEach( (to, from, next) => { }
這里的to代表要去的路由指向,from是指從哪個(gè)路由跳轉(zhuǎn)過(guò)來(lái)的,next是判斷操作,如果為空,表示放行。
比如:下一跳的路由為‘/watchHouse'或者‘/AgentMsg' ,如果沒(méi)有登錄的話,通過(guò)代碼 next ({path: '/login'})
跳轉(zhuǎn)到登錄的界面。代碼如下:
if (!store.state.user && (to.path === '/watchHouse' || to.path === '/AgentMsg')) {
next({ path: '/login' })
}
比如:在路由‘/my'下,要跳往 ‘/ToolCompute',如果沒(méi)有登錄的話,跳轉(zhuǎn)到登錄頁(yè)面。代碼如下:
if (!store.state.user && (from.path === '/my') && (to.path === '/ToolCompute')) {
next({ path: '/login' })
}
全部代碼:
router.beforeEach((to, from, next) => {
if (to.path === '/login') {
next()
} else {
if (!store.state.user && (to.path === '/watchHouse' || to.path === '/AgentMsg')) {
next({ path: '/login' })
} else {
next()
}
if (!store.state.user && (from.path === '/my') && (to.path === '/ToolCompute')) {
next({ path: '/login' })
}
}
})
需要注意的是,路由驗(yàn)證這個(gè)方法函數(shù)與vue實(shí)例的順序還有關(guān)系。如果寫(xiě)在vue()的后面,下面就會(huì)執(zhí)行,后判斷。
如下圖所示:

這樣寫(xiě),當(dāng)然是可以執(zhí)行的路由跳轉(zhuǎn)判斷的,但是當(dāng)我們直接在瀏覽器的地址欄里直接輸入我們要跳轉(zhuǎn)的
完整路由信息的時(shí)候,這個(gè)路由跳轉(zhuǎn)就不會(huì)被判斷了。如下圖所示:

如果把路由驗(yàn)證寫(xiě)到VUE實(shí)例的前面,就不會(huì)出現(xiàn)這樣的問(wèn)題了,這樣就會(huì)先進(jìn)行路由判斷,再進(jìn)行執(zhí)行實(shí)例里邊的內(nèi)容了。
代碼順序如下所示:

響應(yīng)攔截:比如在根實(shí)例中通過(guò)checkLogin()這個(gè)方法去判斷,登錄信息 的狀態(tài),加入登錄超時(shí),則進(jìn)行響應(yīng)攔截,代碼如下。
var app=new Vue({
el: '#app',
router,
store,
created(){
checkLogin().then(function (res) {
if(res.data&&res.data.code==1){
store.commit('login',true);
}
else{
router.push('/watchHouse-css');
}
})
},
template: '<App/>',
components: { App }
})
//響應(yīng)攔截器
axios.interceptors.response.use(function(res){
//如果是未登錄
if(res.data&&res.data.code==2){
app.$alert('登錄用戶已超時(shí),請(qǐng)重新登錄', '提示', {
confirmButtonText: '確定',
type:'warning',
closeOnClickModal:false,
callback: action => {
router.push('/watchHouse-css')
}
});
}
return res;
},function(err){
return Promise.reject(err);
})
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- VueJs路由跳轉(zhuǎn)——vue-router的使用詳解
- Vue.js路由組件vue-router使用方法詳解
- vue-router:嵌套路由的使用方法
- 詳解vue2路由vue-router配置(懶加載)
- Vue+axios 實(shí)現(xiàn)http攔截及路由攔截實(shí)例
- 詳解vue嵌套路由-params傳遞參數(shù)
- vue-router路由簡(jiǎn)單案例介紹
- vue使用watch 觀察路由變化,重新獲取內(nèi)容
- vue2筆記 — vue-router路由懶加載的實(shí)現(xiàn)
- Vue.js:使用Vue-Router 2實(shí)現(xiàn)路由功能介紹
相關(guān)文章
Vue報(bào)錯(cuò):TypeError:?Cannot?create?property?‘xxxx‘?on的解決
這篇文章主要介紹了Vue報(bào)錯(cuò):TypeError:?Cannot?create?property?‘xxxx‘?on的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
Vue2.0 給Tab標(biāo)簽頁(yè)和頁(yè)面切換過(guò)渡添加樣式的方法
下面小編就為大家分享一篇Vue2.0 給Tab標(biāo)簽頁(yè)和頁(yè)面切換過(guò)渡添加樣式的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
Vue使用v-model收集各種表單數(shù)據(jù)、過(guò)濾器的示例詳解
這篇文章主要介紹了Vue使用v-model收集各種表單數(shù)據(jù)、過(guò)濾器的示例,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08
Vue中nvm-windows的安裝與使用教程(親測(cè))
nvm全英文也叫node.js version management,是一個(gè)nodejs的版本管理工具,這篇文章主要介紹了Vue中nvm-windows的安裝與使用,需要的朋友可以參考下2023-02-02
vue+element ui el-tooltip動(dòng)態(tài)顯示隱藏問(wèn)題
這篇文章主要介紹了vue+element ui el-tooltip動(dòng)態(tài)顯示隱藏問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
vue中post請(qǐng)求以a=a&b=b 的格式寫(xiě)遇到的問(wèn)題
這篇文章主要介紹了vue中post請(qǐng)求以a=a&b=b 的格式寫(xiě)遇到的問(wèn)題,需要的朋友可以參考下2018-04-04
vue如何實(shí)現(xiàn)二進(jìn)制流文件導(dǎo)出excel
這篇文章主要介紹了vue如何實(shí)現(xiàn)二進(jìn)制流文件導(dǎo)出excel,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
Vue基礎(chǔ)之MVVM,模板語(yǔ)法和數(shù)據(jù)綁定
這篇文章主要為大家介紹了Vue之MVVM,模板語(yǔ)法和數(shù)據(jù)綁定,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-12-12

