# 组件跳转
组件类似于a标签链接跳转.推荐理由:
功能性组件
这个组件是一个functionnal组件,渲染路径匹配到的视图组件,router-view可以进行多层嵌套
router-view 的props:–name 如果 <router-view>设置了名称,则会渲染对应的路由配置中 components 下的相应组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| 我们有可能使用命名视图创建嵌套视图的复杂布局。这时你也需要命名用到的嵌套 router-view 组件。下面以一个设置面板为例: /settings/emails /settings/profile +-----------------------------------+ +------------------------------+ | UserSettings | | UserSettings | | +-----+-------------------------+ | | +-----+--------------------+ | | | Nav | UserEmailsSubscriptions | | +------------> | | Nav | UserProfile | | | | +-------------------------+ | | | +--------------------+ | | | | | | | | | UserProfilePreview | | | +-----+-------------------------+ | | +-----+--------------------+ | +-----------------------------------+ +------------------------------+ <div> <h1>User Settings</h1> <NavBar/> <router-view/> <router-view name="helper"/> </div>
路由配置 { path: '/settings', // 你也可以在顶级路由就配置命名视图 component: UserSettings, children: [{ path: 'emails', component: UserEmailsSubscriptions }, { path: 'profile', components: { default: UserProfile, helper: UserProfilePreview } }] }
当然了
|
构建实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| const router = new VueRouter({ routes, mode: 'history', linkExactActiveClass: 'active', scrollBehavior(to, from, savedPosition) { if(savedPosition) { return savedPosition; }else { return { x: 0, y: 0 }; } }, base: '/', fallback: true });
分析实例配置: routes: 类型Array<RouteConfig> RouteConfig: 1. path: string 2. component ? : Componetn; 3. name ? : string; 4. components? : {[name: string] : Compoent} 5. redirect? : string | Location | Function 6. props? : boolean | Object | Function 7. alias? : string | Array<string> -- a组件的别名是/b, 意味着,当用户访问路由/b的时候,url显示/b,但是路由实际匹配a组件内容 8. children ? : Array<routeConfig> 9. beforeEnter 10 meta ? : any -- if (to.matched.some(record => record.meta.requiresAuth)) {} 2.6+以后版本更新了下面2个config 11 caseSensitive? : boolean 12 pathToRegexpOptions ? : Object
|
路由对象的属性
1 2 3 4 5 6 7 8
| $route.path: string $route.params: Object $route.query : Object $route.hash : string $route.fullPath: string $route.matched: Array<routeRecord> $route.name : $route.redirectedFrom:
|
实例属性
通过在Vue根实例router配置传入router实例,下面的这些属性成员会被注入到每个子组件里
- this.$router : router实例–常见操作this.$touer.push()
- this.$route: 当前激活的路由信息对象,这个属性是只读的,属性看上面的内容↑
组件内部的配置选项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| beforeRouteEnter (to, from, next) { next(vm => { }) }, beforeRouteUpdate (to, from, next) { }, beforeRouteLeave (to, from, next) { }
|
导航解析流程
- 导航被触发。
- 在失活的组件里调用离开守卫。
- 调用全局的
beforeEach 守卫。
- 在重用的组件里调用
beforeRouteUpdate 守卫 (2.2+)。
- 在路由配置里调用
beforeEnter。
- 解析异步路由组件。
- 在被激活的组件里调用
beforeRouteEnter。
- 调用全局的
beforeResolve 守卫 (2.5+)。
- 导航被确认。
- 调用全局的
afterEach 钩子。
- 触发 DOM 更新。
- 用创建好的实例调用
beforeRouteEnter 守卫中传给 next 的回调函数。