vue的路由封装

路由+路由守卫的封装

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home'
import Login from '../views/Login'
import { getToken } from '@/utils/auth'  // token的封装(有添加,删除,查询的功能)

const routerPush = VueRouter.prototype.push
VueRouter.prototype.push = function push (location) {
return routerPush.call(this, location).catch(error => error)
}
Vue.use(VueRouter)

let routes = []
const routerContext = require.context('./', true, /index\.js$/)
routerContext.keys().forEach(route => {
if (route.startsWith('./index')) {
return
}
const routerModule = routerContext(route)
routes = [...routes, ...(routerModule.default || routerModule)]
})

let defaultRoutes = [
// 主页
{
path: '/',
redirect: {
name: 'Home'
}
},
{
path: '/login',
name: 'Login',
component: Login
},
{
path: '/home',
name: 'Home',
component: Home,
// children: [...routes],
meta: {
isLogin: true // 添加该字段,表示进入这个路由是需要登录的
}// 路由元
}
]
const router = new VueRouter({
// mode: 'history', // 存在页面刷新报404, 我是直接注释掉
base: process.env.BASE_URL,
routes: defaultRoutes
})
// 路由守卫
router.beforeEach((to, from, next) => {
if (to.matched.some(res => res.meta.isLogin)) { // 判断是否需要登录
if (getToken()) {
next()
} else {
next({
path: '/login',
query: {
redirect: to.fullPath
}
})
}
} else {
next()
}
})

export default router

 

posted @ 2020-04-08 10:52  要开心鸭丫  阅读(41)  评论(0编辑  收藏  举报