全局守卫:
vue-router全局有三个守卫
1.router.beforeEach全局前置守卫,进入路由之前
2.router.beforeResolve全局解析守卫,在beforeRouter调用之后调用
3.router.afterEach全局后置钩子 进入路由之后
to/from/next这三个参数:
to和from是将要进入和将要离开的路有对象,路由对象指的是平时通过this.$route获取到的路由对象
next:Function这个参数是个函数,当前的导航被中断,重新开始一个新的导航。
next()进入该路由。
next(false):取消进入路由,url地址重置为from路由地址(也就是即将要离开的路由地址)
next跳转新路由,当前的导航被中断,重新开始一个新的导航
我们可以这样跳转:next('path地址')或者next({"path:"})或者next({name:""})
且允许设置诸如replace:true name:‘home’之类的选项
以及你用在router-link或router.push的对象选项
路由组件内的守卫
1.beforeRouter进入路由之前
2.beforeRouteEnter路由复用同一个组件时
3.beforeRouteLeave离开当前路由时
beforeRouteEnter (to, from, next) {
// 在路由独享守卫后调用 不!能!获取组件实例 `this`,组件实例还没被创建
},
beforeRouteUpdate (to, from, next) {
// 在当前路由改变,但是该组件被复用时调用 可以访问组件实例 `this`
// 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
// 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
},
beforeRouteLeave (to, from, next) {
// 导航离开该组件的对应路由时调用,可以访问组件实例 `this`
}
beforeRouteEnter访问this
因为钩子在组件实例中还没被创建的时候调用,所以不能获取组件实例this,可以通过传一个回调给next来访问组件实例
但是回调的执行时机在mounted后面,所以在这里对this的调用访问意义不大,可以放在直接放在created或者mounted里面
beforeRouteLeave
beforeRouteLeave (to, from , next) {
if (文章保存) {
next(); // 允许离开或者可以跳到别的路由 上面讲过了
} else {
next(false); // 取消离开
}
}