导航就是路由正在发生变化
在路由发生变化时会自动触发的一些函数
一、全局守卫(通过new VueRouter()生成的这个实例对象去使用)
1.全局前置守卫 beforeEach
router.beforeEach((to, from, next) => {
})
2.全局后置守卫 afterEach
router.afterEach((to, from) => {
//afterEach 是在导航已经完成了触发,这时有next也没用
})
3.全局解析守卫 beforeResolve (没有太大的作用)
router.beforeResolve((to, from, next) => {
})
二、路由独享
1. beforeEnter(路由规则中的一个配置项)
new VueRouter({
routes: [
{
path: "/hello",
component: hello,
beforEnter: (to, from, next) => {
}
}
]
})
三、路由组件中(在组件的配置选项中定义的,也就是与那个data、props一起的那个)
1.beforeRouteLeave
2.beforeRouteUpdate
3.beforeRouteEnter
{
data(){
return {
name: "张三"
}
},
beforeRouteLeave(to, from, next){
},
beforeRouteUpdate(to, from, next){
},
beforeRouteEnter(to, from, next){
}
}
一、to 代表着将要去的路由的信息对象
二、from 从from要去to 当前导航正要离开的路由
三、next 是一个函数,必须要调用
1.next() 进入下一个
2.next("/") next({path:’/list’}) 重定向到某个路由。
一、 /home -> /list
1. /home组件中的 beforeRouteLeave -> beforeEach
2. /list 的配置中触发 beforeEnter -> /list组件中的 beforeRouteEnter -> afterEach
二、/detail/1 -> /detail/2
1. 全局前置beforeEach
2. detail组件中的beforeRouteUpdate
3. 全局后置 afterEach
方案一、
对个人中心页面配置路由独享守卫beforeEnter,在里面判断是否有登陆
方案二、
给需要身份认证的页面配置路由元信息(meta),然后再全局前置守卫中,处理即可。beforeEach中处理即可。
meta 元信息是给某个路由配置一些额外的信息。
需求增加:登陆成功之后,浏览器后退不要进入登陆页面。
在登陆成功跳转的时候,不要使用push,使用replace实现就行。
需求再增加:登陆成功之后要跳转回之前想要去的页面
- 在身份验证不通过,打回到登陆页面时,将当前的地址携带在url地址上,通过?号传递过去
- 登陆页面登陆成功之后,通过url地址获取到之前要去的页面地址,然后跳转即可。
?推荐使用to.fullPath 而不是 to.path 好在哪里?- 比如我们去/my的时候,url路由携带有?号的参数。 /my?type=1&hello=2
- 这时使用to.path 只能得到/my
- 而使用to.fullPath 能得到完整的/my?type=1&hello=2