1# @system.router (页面路由) 2<!--Kit: ArkUI--> 3<!--Subsystem: ArkUI--> 4<!--Owner: @mayaolll--> 5<!--Designer: @jiangdayuan--> 6<!--Tester: @lxl007--> 7<!--Adviser: @HelloCrease--> 8 9通过不同的uri访问不同的页面。 10 11> **说明:** 12> 13> - 从API version 8 开始,该接口不再维护,推荐使用新接口[`@ohos.router`](js-apis-router.md)。 14> 15> 16> - 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 17 18 19## 导入模块 20 21 22```ts 23import router from '@system.router'; 24``` 25 26## router.push 27 28push(options: RouterOptions): void 29 30跳转到应用内的指定页面。 31 32**系统能力:** SystemCapability.ArkUI.ArkUI.Full 33 34**参数:** 35 36| 参数名 | 类型 | 必填 | 说明 | 37| ------- | ------------------------------- | ---- | -------------------------- | 38| options | [RouterOptions](#routeroptions) | 是 | 页面路由参数,详细请参考RouterOptions。 | 39 40**示例:** 41 42```ts 43// 在当前页面中 44import router from '@system.router'; 45class A{ 46 pushPage() { 47 router.push({ 48 uri: 'pages/routerpage2/routerpage2', 49 params: { 50 data1: 'message', 51 data2: { 52 data3: [123, 456, 789] 53 } 54 } 55 }); 56 } 57} 58export default new A() 59``` 60 61 62```ts 63// 在routerpage2页面中 64class B{ 65 data:Record<string,string> = {'data1': 'default'} 66 data2:Record<string,number[]> = {'data3': [1, 2, 3]} 67 onInit() { 68 console.info('showData1:' + this.data.data1); 69 console.info('showData3:' + this.data2.data3); 70 } 71} 72export default new B() 73``` 74 75> **说明:** 76> 页面路由栈支持的最大Page数量为32。 77 78 79## router.replace 80 81replace(options: RouterOptions): void 82 83用应用内的某个页面替换当前页面,并销毁被替换的页面。 84 85**系统能力:** SystemCapability.ArkUI.ArkUI.Lite 86 87**参数:** 88 89| 参数名 | 类型 | 必填 | 说明 | 90| ------- | ------------------------------- | ---- | -------------------------- | 91| options | [RouterOptions](#routeroptions) | 是 | 页面路由参数,详细请参考RouterOptions。 | 92 93**示例:** 94 95```ts 96// 在当前页面中 97import router from '@system.router'; 98class C{ 99 replacePage() { 100 router.replace({ 101 uri: 'pages/detail/detail', 102 params: { 103 data1: 'message' 104 } 105 }); 106 } 107} 108export default new C() 109``` 110 111 112```ts 113// 在detail页面中 114class Area { 115 data:Record<string,string> = {'data1': 'default'} 116 onInit() { 117 console.info(`showData1: ${JSON.stringify(this.data)}`); 118 } 119} 120export default new Area() 121``` 122 123## router.back 124 125back(options?: BackRouterOptions): void 126 127返回上一页面或指定的页面。 128 129**系统能力:** SystemCapability.ArkUI.ArkUI.Full 130 131**参数:** 132 133| 参数名 | 类型 | 必填 | 说明 | 134| ------- | --------------------------------------- | ---- | ----------------------- | 135| options | [BackRouterOptions](#backrouteroptions) | 否 | 详细请参考BackRouterOptions。 | 136 137**示例:** 138 139```ts 140// index页面 141import router from '@system.router'; 142class D{ 143 indexPushPage() { 144 router.push({ 145 uri: 'pages/detail/detail' 146 }); 147 } 148} 149export default new D() 150``` 151 152 153```ts 154// detail页面 155import router from '@system.router'; 156class E{ 157 detailPushPage() { 158 router.push({ 159 uri: 'pages/mall/mall' 160 }); 161 } 162} 163export default new E() 164``` 165 166 167```ts 168// mall页面通过back,将返回detail页面 169import router from '@system.router'; 170class F{ 171 mallBackPage() { 172 router.back(); 173 } 174} 175export default new F() 176``` 177 178 179```ts 180// detail页面通过back,将返回index页面 181import router from '@system.router'; 182class G{ 183 defaultBack() { 184 router.back(); 185 } 186} 187export default new G() 188``` 189 190 191```ts 192// 通过back,返回到detail页面 193import router from '@system.router'; 194class H{ 195 backToDetail() { 196 router.back({uri:'pages/detail/detail'}); 197 } 198} 199export default new H() 200``` 201 202> **说明:** 203> 示例中的uri字段是页面路由,由配置文件中的pages列表指定。 204 205## router.getParams<sup>7+</sup> 206 207getParams(): ParamsInterface 208 209获取当前页面的参数信息。 210 211**系统能力:** SystemCapability.ArkUI.ArkUI.Full 212 213**返回值:** 214 215| 类型 | 说明 | 216| ----------------------------------- | --------------------- | 217| [ParamsInterface](#paramsinterface) | 详细请参见ParamsInterface。 | 218 219## router.clear 220 221clear(): void 222 223清空页面栈中的所有历史页面,仅保留当前页面作为栈顶页面。 224 225**系统能力:** SystemCapability.ArkUI.ArkUI.Full 226 227**示例:** 228 229```ts 230import router from '@system.router'; 231class I{ 232 clearPage() { 233 router.clear(); 234 } 235} 236export default new I() 237``` 238 239## router.getLength 240 241getLength(): string 242 243获取当前在页面栈内的页面数量。 244 245**系统能力:** SystemCapability.ArkUI.ArkUI.Full 246 247**返回值:** 248 249| 类型 | 说明 | 250| ------ | ------------------ | 251| string | 页面数量,页面栈支持最大数值是32。 | 252 253**示例:** 254 255```ts 256import router from '@system.router'; 257class J{ 258 getLength() { 259 let size = router.getLength(); 260 console.log('pages stack size = ' + size); 261 } 262} 263export default new J() 264``` 265 266## router.getState 267 268getState(): RouterState 269 270获取当前页面的状态信息。 271 272**系统能力:** SystemCapability.ArkUI.ArkUI.Full 273 274**返回值:** 275 276| 参数类型 | 说明 | 277| --------------------------- | ----------------- | 278| [RouterState](#routerstate) | 详细请参见RouterState。 | 279 280**示例:** 281 282```ts 283import router from '@system.router'; 284class K{ 285 getState() { 286 let page = router.getState(); 287 console.log('current index = ' + page.index); 288 console.log('current name = ' + page.name); 289 console.log('current path = ' + page.path); 290 } 291} 292export default new K() 293``` 294 295## router.enableAlertBeforeBackPage<sup>6+</sup> 296 297enableAlertBeforeBackPage(options: EnableAlertBeforeBackPageOptions): void 298 299开启页面返回询问对话框。 300 301**系统能力:** SystemCapability.ArkUI.ArkUI.Full 302 303**参数:** 304 305| 参数名 | 类型 | 必填 | 说明 | 306| ------- | ---------------------------------------- | ---- | -------------------------------------- | 307| options | [EnableAlertBeforeBackPageOptions](#enablealertbeforebackpageoptions6) | 是 | 详细请参见EnableAlertBeforeBackPageOptions。 | 308 309**示例:** 310 311```ts 312import router from '@system.router'; 313class L{ 314 enableAlertBeforeBackPage() { 315 router.enableAlertBeforeBackPage({ 316 message: 'Message Info', 317 success: ()=> { 318 console.log('success'); 319 }, 320 cancel: ()=> { 321 console.log('cancel'); 322 } 323 }); 324 } 325} 326export default new L() 327``` 328 329## router.disableAlertBeforeBackPage<sup>6+</sup> 330 331disableAlertBeforeBackPage(options?: DisableAlertBeforeBackPageOptions): void 332 333禁用页面返回询问对话框。 334 335**系统能力:** SystemCapability.ArkUI.ArkUI.Full 336 337**参数:** 338 339| 参数名 | 类型 | 必填 | 说明 | 340| ------- | ---------------------------------------- | ---- | --------------------------------------- | 341| options | [DisableAlertBeforeBackPageOptions](#disablealertbeforebackpageoptions6) | 否 | 详细请参见DisableAlertBeforeBackPageOptions。 | 342 343**示例:** 344 345```ts 346import router from '@system.router'; 347class Z{ 348 disableAlertBeforeBackPage() { 349 router.disableAlertBeforeBackPage({ 350 success: ()=> { 351 console.log('success'); 352 }, 353 cancel: ()=> { 354 console.log('cancel'); 355 } 356 }); 357 } 358} 359export default new Z() 360``` 361 362## RouterOptions 363 364定义路由器的选项。 365 366**系统能力:** 以下各项对应的系统能力均为SystemCapability.ArkUI.ArkUI.Lite 367 368| 名称 | 类型 | 必填 | 说明 | 369| ------ | -------- | ---- | ------------------------------------------------------------ | 370| uri | string | 是 | 目标页面的uri,可以是以下的两种格式:<br/>1. 页面的绝对路径,由config.json文件中的页面列表提供。例如:<br/>- pages/index/index<br/> - pages/detail/detail<br/>2. 特定路径。如果URI为斜杠(/),则显示主页。 | 371| params | object | 否 | 表示路由跳转时要同时传递到目标页面的数据。跳转到目标页面后,使用router.getParams()获取传递的参数,此外,在类web范式中,参数也可以在页面中直接使用,如this.keyValue(keyValue为跳转时params参数中的key值),如果目标页面中已有该字段,则其值会被传入的字段值覆盖。 | 372 373 374## BackRouterOptions 375 376定义路由器返回的选项。 377 378**系统能力:** 以下各项对应的系统能力有所不同,详见下表。 379 380| 名称 | 类型 | 必填 | 说明 | 381| ------ | -------- | ---- | ------------------------------------------------------------ | 382| uri<sup>7+</sup> | string | 否 | 返回到指定uri的界面,如果页面栈上没有uri页面,则不响应该情况。如果uri未设置,则返回上一页。 <br>**系统能力:** SystemCapability.ArkUI.ArkUI.Full | 383| params<sup>7+</sup> | object | 否 | 跳转时要同时传递到目标页面的数据。 <br>**系统能力:** SystemCapability.ArkUI.ArkUI.Lite | 384 385## RouterState 386 387定义路由器的状态。 388 389**系统能力:** 以下各项对应的系统能力均为SystemCapability.ArkUI.ArkUI.Full 390 391| 名称 | 类型 | 必填 | 说明 | 392| ----- | ------ | ---- | ---------------------------------- | 393| index | number | 是 | 表示当前页面在页面栈中的索引。从栈底到栈顶,index从1开始递增。 | 394| name | string | 是 | 表示当前页面的名称,即对应文件名。 | 395| path | string | 是 | 表示当前页面的路径。 | 396 397## EnableAlertBeforeBackPageOptions<sup>6+</sup> 398 399定义EnableAlertBeforeBackPage选项。 400 401**系统能力:** 以下各项对应的系统能力均为SystemCapability.ArkUI.ArkUI.Full 402 403| 名称 | 类型 | 必填 | 说明 | 404| -------- | ------------------------ | ---- | -------------------------------------------------- | 405| message | string | 是 | 询问对话框内容。 | 406| success | (errMsg: string) => void | 否 | 用户选择对话框确认按钮时触发,errMsg表示返回信息。 | 407| cancel | (errMsg: string) => void | 否 | 用户选择对话框取消按钮时触发,errMsg表示返回信息。 | 408| complete | () => void | 否 | 当对话框关闭时触发该回调。 | 409 410## DisableAlertBeforeBackPageOptions<sup>6+</sup> 411 412定义DisableAlertBeforeBackPage参数选项。 413 414**系统能力:** 以下各项对应的系统能力均为SystemCapability.ArkUI.ArkUI.Full 415 416| 名称 | 类型 | 必填 | 说明 | 417| -------- | ------------------------ | ---- | -------------------------------------------------- | 418| success | (errMsg: string) => void | 否 | 关闭询问对话框能力成功时触发,errMsg表示返回信息。 | 419| cancel | (errMsg: string) => void | 否 | 关闭询问对话框能力失败时触发,errMsg表示返回信息。 | 420| complete | () => void | 否 | 当对话框关闭时触发该回调。 | 421 422## ParamsInterface 423 424| 名称 | 参数类型 | 说明 | 425| ------------- | -------- | -------------- | 426| [key: string] | object | 路由参数列表。 | 427