vue Router 是vue.js的官方路由管理器,能够经过hash匹配组件并渲染而不刷新页面vue
hash模式浏览器
history模式bash
经过不一样参数,来匹配到同一组件服务器
好比咱们有一个通用的文章详情页,须要经过不一样的文章id来显示不一样的内容,则咱们能够经过 article:id 来完成异步
$route.paramsthis
一个 key/value 对象,包含了动态片断和全匹配片断spa
article/:id 转换为> $route.params.idcode
article/123 => $route.params.id = 123component
$route.queryrouter
一个 key/value 对象,表示 URL 查询参数
article?id='123' => $route.params.id = '123'
注意!改变路由的参数不会触发进入/离开的导航守卫
全局前置守卫< beforeEach >
当导航被触发时会被调用,守卫是异步解析执行的,当守卫未resolved以前,导航一直处于等待
=> code <=
router.beforeEach((to, from, next) => {
······
})
复制代码
全局解析守卫< beforeResolve >
当导航被确认同时组件内守卫和异步守卫都解析后触发
全局后置钩子< afterEach >
导航跳转完成后被触发
router.afterEach((to, from) => {
······
})
复制代码
beforeEnter
const router = new VueRouter({
routes: [
{
path: '/foo',
component: Foo,
beforeEnter: (to, from, next) => {
// ...
}
}
]
})
复制代码
仅限在组件内定义使用
beforeRouteEnter
beforeRouteEnter (to, from, next) {
// 不!能!获取组件实例 `this`
// 由于当守卫执行前,组件实例还没被建立
}
复制代码
beforeRouteEnter (to, from, next) {
next(vm => {
经过vm访问组件实例
})
}
复制代码
beforeRouteUpdate
beforeRouteUpdate (to, from, next) {
// 能够访问this
this.name = to.params.name // 能够获取路由参数
next()
}
复制代码
beforeRouteLeave
beforeRouteLeave (to, from, next) {
const answer = window.confirm('Do you really want to leave? you have unsaved changes!')
if (answer) {
next()
} else {
next(false) // 可经过此方法取消导航
}
}
复制代码