1# 组件导航和页面路由概述
2
3组件导航(Navigation)和页面路由(@ohos.router)均支持应用内的页面跳转,但组件导航支持在组件内部进行跳转,使用更灵活。组件导航具备更强的一次开发多端部署能力,可以进行更加灵活的页面栈操作,同时支持更丰富的动效和生命周期。因此,推荐使用组件导航(Navigation)来实现页面跳转以及组件内的跳转,以获得更佳的使用体验。
4
5## 架构差异
6
7从ArkUI组件树层级上来看,原先由Router管理的page在页面栈管理节点stage的下面。Navigation作为导航容器组件,可以挂载在单个page节点下,也可以叠加、嵌套。Navigation管理了标题栏、内容区和工具栏,内容区用于显示用户自定义页面的内容,并支持页面的路由能力。Navigation的这种设计上有如下优势:
8
9![image](figures/Navigation和Router架构图.png)
10
111. 接口上显式区分标题栏、内容区和工具栏,实现更加灵活的管理和UX动效能力;
12
132. 显式提供路由容器概念,由开发者决定路由容器的位置,支持在全模态、半模态、弹窗中显示;
14
153. 整合UX设计和一多能力,默认提供统一的标题显示、页面切换和单双栏适配能力;
16
174. 基于通用[UIBuilder](../quick-start/arkts-builder.md)能力,由开发者决定页面别名和页面UI对应关系,提供更加灵活的页面配置能力;
18
195. 基于组件属性动效和共享元素动效能力,将页面切换动效转换为组件属性动效实现,提供更加丰富和灵活的切换动效;
20
216. 开放了页面栈对象,开发者可以继承,能更好的管理页面显示。
22
23## 能力对比
24
25| 业务场景                                      | Navigation                            | Router                                 |
26| --------------------------------------------- | ------------------------------------- | -------------------------------------- |
27| 一多能力                                      | 支持,Auto模式自适应单栏跟双栏显示    | 不支持                                 |
28| 跳转指定页面                                  | pushPath & pushDestination            | pushUrl & pushNameRoute                |
29| 跳转HSP中页面                                 | 支持                                  | 支持                                   |
30| 跳转HAR中页面                                 | 支持                                  | 支持                                   |
31| 跳转传参                                      | 支持                                  | 支持                                   |
32| 获取指定页面参数                              | 支持                                  | 不支持                                 |
33| 传参类型                                      | 传参为对象形式                        | 传参为对象形式,对象中暂不支持方法变量 |
34| 跳转结果回调                                  | 支持                                  | 支持                                   |
35| 跳转单例页面                                  | 支持                                  | 支持                                   |
36| 页面返回                                      | 支持                                  | 支持                                   |
37| 页面返回传参                                  | 支持                                  | 支持                                   |
38| 返回指定路由                                  | 支持                                  | 支持                                   |
39| 页面返回弹窗                                  | 支持,通过路由拦截实现                | showAlertBeforeBackPage                |
40| 路由替换                                      | replacePath & replacePathByName       | replaceUrl & replaceNameRoute          |
41| 路由栈清理                                    | clear                                 | clear                                  |
42| 清理指定路由                                  | removeByIndexes & removeByName        | 不支持                                 |
43| 转场动画                                      | 支持                                  | 支持                                   |
44| 自定义转场动画                                | 支持                                  | 支持,动画类型受限                     |
45| 屏蔽转场动画                                  | 支持全局和单次                        | 支持 设置pageTransition方法duration为0 |
46| geometryTransition共享元素动画                | 支持(NavDestination之间共享)        | 不支持                                 |
47| 页面生命周期监听                              | UIObserver.on('navDestinationUpdate') | UIObserver.on('routerPageUpdate')      |
48| 获取页面栈对象                                | 支持                                  | 不支持                                 |
49| 路由拦截                                      | 支持通过setInterception做路由拦截       | 不支持                                 |
50| 路由栈信息查询                                | 支持                                  | getState() & getLength()               |
51| 路由栈move操作                                | moveToTop & moveIndexToTop            | 不支持                                 |
52| 沉浸式页面                                    | 支持                                  | 不支持,需通过window配置               |
53| 设置页面标题栏(titlebar)和工具栏(toolbar) | 支持                                  | 不支持                                 |
54| 模态嵌套路由                                  | 支持                                  | 不支持                                 |