1# NavRouter
2
3导航组件,默认提供点击响应处理,不需要开发者自定义点击事件逻辑。
4
5> **说明:**
6>
7> 从API Version 13 开始,该组件不再维护,推荐使用[NavPathStack](ts-basic-components-navigation.md#navpathstack10)配合navDestination属性进行页面路由。
8>
9> 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
10
11## 子组件
12
13必须包含两个子组件,其中第二个子组件必须为[NavDestination](ts-basic-components-navdestination.md)。
14
15> **说明:**
16>
17> 子组件个数异常时:
18> 1. 有且仅有1个时,触发路由到NavDestination的能力失效。
19> 2. 有且仅有1个时,且使用NavDestination场景下,不进行路由。
20> 3. 大于2个时,后续的子组件不显示。
21> 4. 第二个子组件不为NavDestination时,触发路由功能失效。
22
23## 接口
24
25### NavRouter
26
27NavRouter()
28
29**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
30
31**系统能力:** SystemCapability.ArkUI.ArkUI.Full
32
33### NavRouter<sup>10+</sup>
34
35NavRouter(value: RouteInfo)
36
37提供路由信息,指定点击NavRouter时,要跳转的NavDestination页面。
38
39**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
40
41**系统能力:** SystemCapability.ArkUI.ArkUI.Full
42
43**参数:**
44
45| 参数名     | 类型                                | 必填   | 说明          |
46| ------- | ----------------------------------- | ---- | ------------- |
47| value   | [RouteInfo](#routeinfo10对象说明) | 是    | 路由信息 |
48
49## 属性
50
51除支持[通用属性](ts-universal-attributes-size.md)外,还支持以下属性:
52
53### mode<sup>10+</sup>
54
55mode(mode: NavRouteMode)
56
57设置指定点击NavRouter跳转到NavDestination页面时,使用的路由模式。
58
59**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
60
61**系统能力:** SystemCapability.ArkUI.ArkUI.Full
62
63**参数:** 
64
65| 参数名                           | 类型                                     | 必填                                   | 说明                                       |
66| ----------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
67| mode                  | [NavRouteMode](#navroutemode枚举类型说明)                                  | 是                                 | 指定点击NavRouter跳转到NavDestination页面时,使用的路由模式。<br/>默认值:NavRouteMode.PUSH_WITH_RECREATE |
68
69## RouteInfo<sup>10+</sup>对象说明
70
71**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
72
73**系统能力:** SystemCapability.ArkUI.ArkUI.Full
74
75| 名称                 | 类型                                                     | 必填 | 说明                                                         |
76| -------------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
77| name             | string            | 是   | 点击NavRouter跳转到的NavDestination页面的名称。 |
78| param             | unknown            | 否   | 点击NavRouter跳转到NavDestination页面时,传递的参数。 |
79
80## NavRouteMode枚举类型说明
81
82**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
83
84| 名称    | 说明             |
85| ----- | ---------------- |
86| PUSH_WITH_RECREATE | 跳转到新的NavDestination页面时,替换当前显示的NavDestination页面,页面销毁,但该页面信息仍保留在路由栈中。 |
87| PUSH   | 跳转到新的NavDestination页面时,覆盖当前显示的NavDestination页面,该页面不销毁,且页面信息保留在路由栈中。 |
88| REPLACE   | 跳转到新的NavDestination页面时,替换当前显示的NavDestination页面,页面销毁,且该页面信息从路由栈中清除。 |
89
90## 事件
91
92### onStateChange
93
94onStateChange(callback: (isActivated: boolean) => void)
95
96组件激活状态切换时触发该回调。开发者点击激活NavRouter,加载对应的NavDestination子组件时,回调onStateChange(true)。NavRouter对应的NavDestination子组件不再显示时,回调onStateChange(false)。
97
98**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
99
100**系统能力:** SystemCapability.ArkUI.ArkUI.Full
101
102**参数:** 
103
104| 参数名      | 类型    | 必填 | 说明                                    |
105| ----------- | ------- | ---- | --------------------------------------- |
106| isActivated | boolean | 是   | isActivated为true时表示激活,为false时表示未激活。 |
107
108## 示例
109
110```ts
111// xxx.ets
112@Entry
113@Component
114struct NavRouterExample {
115  @State isActiveWLAN: boolean = false
116  @State isActiveBluetooth: boolean = false
117
118  build() {
119    Navigation() {
120      NavRouter() {
121        Row() {
122          Row()
123            .width(30)
124            .height(30)
125            .borderRadius(30)
126            .margin({ left: 3, right: 10 })
127            .backgroundColor(Color.Pink)
128          Text(`WLAN`)
129            .fontSize(22)
130            .fontWeight(500)
131            .textAlign(TextAlign.Center)
132        }
133        .width('90%')
134        .height(60)
135
136        NavDestination() {
137          Flex({ direction: FlexDirection.Row }) {
138            Text('未找到可用WLAN').fontSize(30).padding({ left: 15 })
139          }
140        }.title("WLAN")
141      }
142      .margin({ top: 10, bottom: 10 })
143      .backgroundColor(this.isActiveWLAN ? '#ccc' : '#fff')
144      .borderRadius(20)
145      .mode(NavRouteMode.PUSH_WITH_RECREATE)
146      .onStateChange((isActivated: boolean) => {
147        this.isActiveWLAN = isActivated
148      })
149
150      NavRouter() {
151        Row() {
152          Row()
153            .width(30)
154            .height(30)
155            .borderRadius(30)
156            .margin({ left: 3, right: 10 })
157            .backgroundColor(Color.Pink)
158          Text(`蓝牙`)
159            .fontSize(22)
160            .fontWeight(500)
161            .textAlign(TextAlign.Center)
162        }
163        .width('90%')
164        .height(60)
165
166        NavDestination() {
167          Flex({ direction: FlexDirection.Row }) {
168            Text('未找到可用蓝牙').fontSize(30).padding({ left: 15 })
169          }
170        }.title("蓝牙")
171      }
172      .margin({ top: 10, bottom: 10 })
173      .backgroundColor(this.isActiveBluetooth ? '#ccc' : '#fff')
174      .borderRadius(20)
175      .mode(NavRouteMode.REPLACE)
176      .onStateChange((isActivated: boolean) => {
177        this.isActiveBluetooth = isActivated
178      })
179    }
180    .height('100%')
181    .width('100%')
182    .title('设置')
183    .backgroundColor("#F2F3F5")
184    .titleMode(NavigationTitleMode.Free)
185    .mode(NavigationMode.Auto)
186  }
187}
188```
189
190![NavRouter](./figures/NavRouter.gif)