路由守卫beforeEach,beforeResolve,aft
2018-06-25 本文已影响0人
Amy_yqh
index.js
router.beforeEach((to, from, next) => {
console.log('before each invoked');
if (to.fullPath === '/app') {
// next('/login')//不仅可以写字符串还可以是一个对象
next({path: '/login', replace})
} else {
next()
}
});
router.beforeResolve((to, from, next) => {
console.log("before resolve invoked")
next();
});
router.afterEach((to, from) =>{
console.log("after invoked")
})
路由守卫常用于路由跳转判断是否需要登录等,如果需要就跳转到登录页面
vue的另外一个钩子函数 beforeEnter
在routes.js(路由)里面设置
export default [
{
path: '/login',
component: Login,
name: 'login',
// 进入Login页面前执行的钩子函数
beforeEnter (to, from, next) {
console.log("Loginroute before enter")
next();
},
},
]
用于组件内部的钩子
export default{
// 从另外的组件进入该组件前触发该钩子
beforeRouteEnter(to, from, next) {
console.log("todo before enter");
console.log(this) // 这里获取不到上下文
next(vm => { // next里面有一个回到函数可以获取到上下文,把请求到的数据塞到vue对象中
console.log(vm.id)
console.log(vm.msg)
vm.test();
});
},
// 同一个组件,param不同的是触发,常用与同一个组件当传入不通参数时,展示不同的数据
beforeRouteUpdate(to, from, next){
console.log("todo update enter")
next();
},
// 该组件离开跳转到另外的组件时触发该钩子,常应用于用户表单,当用户填了一部分内容,需要提醒用户是否离开页面
beforeRouteLeave(to, from, next){
console.log("todo leave enter")
if(global.confirm('are you sure')){
next();
}
},
data(){
return{
}
}
}
特别注意:beforeRouteUpdate的触发条件
image.pngimage.png
当从app123,跳转到app456的时候就会触发beforeRouteUpdate