vue 中 $route 和 $router 的区别
前言:在路由动态加载的时候常需要用到 router 和 route ,记下区分
https://router.vuejs.org/zh/api/#router-%E6%9E%84%E5%BB%BA%E9%80%89%E9%A1%B9
this.$router
是 router 实例,通过 this.$router 访问路由器,相当是获得了整个路由文件。在 $router.option.routes 中,或查看到当前项目的整个路由结构具有实例方法:
导航守卫 router.beforeEach((to, from, next) => { // 必须调用next }) router.beforeResolve((to, from, next) => { /* 必须调用 `next` */ }) router.afterEach((to, from) => {}) 动态导航到新路由 router.push router.replace router.go router.back router.forward
this.$route
一个路由对象 (route object) 表示当前激活的路由的状态信息,包含了当前 URL 解析得到的信息,还有 URL 匹配到的路由记录 (route records)。
路由对象是不可变 (immutable) 的,每次成功的导航后都会产生一个新的对象。不过可以 watch (监测变化) 它。
路由对象出现在多个地方:
- 在组件内,this.$route
- 在 $route 观察者回调内
- router.match(location) 返回值
- 导航守卫的参数。 to,from等
通过 this.$route 访问的是当前路由,获取和当前路由有关的信息(例如做动态标签导航栏)
fullPath: "" // 当前路由完整路径,包含查询参数和 hash 的完整路径 hash: "" // 当前路由的 hash 值 (锚点) matched: [] // 包含当前路由的所有嵌套路径片段的路由记录 meta: {} // 路由文件中自赋值的meta信息 name: "" // 路由名称 params: {} // 一个 key/value 对象,包含了动态片段和全匹配片段就是一个空对象。 path: "" // 字符串,对应当前路由的路径 query: {} // 一个 key/value 对象,表示 URL 查询参数。跟随在路径后用'?'带的参数