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