路由配置 与拦截 示例
import Vue from "vue";
import Router from "vue-router";
import store from '../store'
Vue.use(Router)
const pushPlugin = Router.prototype.push
Router.prototype.push = function(params){
pushPlugin.call(this,params).catch(()=>{})
}
const NotRight = () => import('../common/403')
const Login = () => import('../pages/login')
const Home = () => import('../pages/home')
const router = new Router({
mode:'history',
routes: [
{path:'/',redirect:'/login'},
{path:'/login',component:Login,meta:{noNeedLogin:true}},
{path:'/403',component:NotRight,meta:{noNeedLogin:true}},
{path:'/home',component:Home}
]
})
router.beforeEach(function(to , _ , next){
if(to.meta.noNeedLogin){
next()
return
}
let token = store.getters['common/token']
if(!token){
next('/login')
return
}
let hasRight = true
if(!hasRight){
next('/403')
return
}
next()
})
export default router
拦截的思路
首先判断是否需要拦截
获取标识--vuex中获取
判断是否符合条件;token作为登陆标识,用户访问权限
获取meta里面的标识 to.meta.noNeedLogin 如果为真那么就跳转
还有判断token 如果没有token那就跳转到 登陆页面
再判断 是否 有权限访问页面 (有些页面需要权限才能访问,这个和当前项目需求有关)