// 路由router
{name: 'news.list', path: '/news/list', component: NewsList},
{name: 'goods.list', path: '/goods/list', component: GoodsList}
// 详情页组件
beforeRouteEnter(to, from, next) {
let title = '';
if(from.name === 'news.list') {
title = '新闻详情';
} else if (from.name === 'goods.list') {
title = '商品详情';
}
// 一定要调用 next ,否则没有任何效果
next(vm => {
// 通过 vm 访问组件实例
vm.title = title;
})
}
如果你不想全局配置守卫的话,你可以为某些路由单独配置守卫:
const router = new VueRouter({
routes: [{path: '/foo', component: Foo,
beforeEnter: (to, from, next) => {
// 参数用法什么的都一样,调用顺序在全局前置守卫后面,所以不会被全局守卫覆盖
// ...
}
}]
})
beforeRouteEnter (to, from, next) {
在渲染该组件的对应路由被 confirm 前调用
不!能!获取组件实例 `this`
因为当钩子执行前,组件实例还没被创建
},
beforeRouteUpdate (to, from, next) {
在当前路由改变,但是该组件被复用时调用
举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
可以访问组件实例 `this`
},
beforeRouteLeave (to, from, next) {
导航离开该组件的对应路由时调用
可以访问组件实例 `this`
}