$router 可以设置路由
$route 只可以读取路由信息
如果要在路由中自定义路由信息的标识,可以在每个路由中通过设置meta(元数据)属性来配置,如: meta: {
num: 0
}
路由拦截/路由导航守卫
// 路由拦截/路由导航守卫(在路由这个文件里面写),路由导航守卫:前置导航守卫和后置导航守卫
// 三个参数
// to代表即将进入的路由
// from代表即将离开的路由
// next(),每一个导航守卫必须至少搭配一个next(),符合条件后只有调用next()才会进行跳转,否则会一直卡在没跳转那个地方
router.beforeEach((to, from, next) => {
// 想要进入购物车页面,必须有token
// console.log('to:', to)
// console.log('from:', from)
const token = localStorage.getItem('token')
if (to.path === '/cart') {
// 此时必须要有token
if (token) {
// 这个next()是只针对cart路由的
next()
} else {
vm.$toast('请先登录!')
// 定时器
setTimeout(() => {
next('/user')
}, 1000)
}
return false
}
// 下方这个next()是适配所有路由的
next()
})