js-apis-system-router.md 11.5 KB
Newer Older
1
# @system.router (页面路由)
Z
zengyawen 已提交
2

T
explain  
tianyu 已提交
3 4
通过不同的uri访问不同的页面。

H
HelloCrease 已提交
5
> **说明:**
H
HelloCrease 已提交
6
>
Z
zengyawen 已提交
7
> - 从API Version 8 开始,该接口不再维护,推荐使用新接口[`@ohos.router`](js-apis-router.md)。
H
HelloCrease 已提交
8 9 10
>
>
> - 本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
Z
zengyawen 已提交
11 12 13 14 15


## 导入模块


L
lixinnan 已提交
16
```ts
Z
zengyawen 已提交
17 18 19 20 21
import router from '@system.router';
```

## router.push

22
push(options: RouterOptions): void
Z
zengyawen 已提交
23 24 25 26 27 28 29

跳转到应用内的指定页面。

**系统能力:** SystemCapability.ArkUI.ArkUI.Full

**参数:**

H
HelloCrease 已提交
30 31 32
| 参数名     | 类型                              | 必填   | 说明                         |
| ------- | ------------------------------- | ---- | -------------------------- |
| options | [RouterOptions](#routeroptions) | 是    | 页面路由参数,详细请参考RouterOptions。 |
Z
zengyawen 已提交
33 34 35

**示例:**

L
lixinnan 已提交
36
```ts
Z
zengyawen 已提交
37
// 在当前页面中
L
lixinnan 已提交
38 39
import router from '@system.router';
class A{
Z
zengyawen 已提交
40 41 42 43 44 45 46
  pushPage() {
    router.push({
      uri: 'pages/routerpage2/routerpage2',
      params: {
        data1: 'message',
        data2: {
          data3: [123, 456, 789]
Y
yamila 已提交
47 48
        }
      }
Z
zengyawen 已提交
49 50 51
    });
  }
}
L
lixinnan 已提交
52
export default new A()
Z
zengyawen 已提交
53 54 55
```


L
lixinnan 已提交
56
```ts
Z
zengyawen 已提交
57
// 在routerpage2页面中
L
lixinnan 已提交
58 59 60
class B{
  data:Record<string,string> = {'data1': 'default'}
  data2:Record<string,number[]> = {'data3': [1, 2, 3]}
Z
zengyawen 已提交
61
  onInit() {
L
lixinnan 已提交
62
    console.info('showData1:' + this.data.data1);
Z
zengyawen 已提交
63 64 65
    console.info('showData3:' + this.data2.data3);
  }
}
L
lixinnan 已提交
66
export default new B()
Z
zengyawen 已提交
67 68
```

zyjhandsome's avatar
zyjhandsome 已提交
69
> **说明:**
Z
zengyawen 已提交
70 71 72 73 74
> 页面路由栈支持的最大Page数量为32。


## router.replace

75
replace(options: RouterOptions): void
Z
zengyawen 已提交
76 77 78 79 80 81 82

用应用内的某个页面替换当前页面,并销毁被替换的页面。

**系统能力:** SystemCapability.ArkUI.ArkUI.Lite

**参数:**

H
HelloCrease 已提交
83 84 85
| 参数名     | 类型                              | 必填   | 说明                         |
| ------- | ------------------------------- | ---- | -------------------------- |
| options | [RouterOptions](#routeroptions) | 是    | 页面路由参数,详细请参考RouterOptions。 |
Z
zengyawen 已提交
86 87 88

**示例:**

L
lixinnan 已提交
89
```ts
Z
zengyawen 已提交
90
// 在当前页面中
L
lixinnan 已提交
91 92
import router from '@system.router';
class C{
Z
zengyawen 已提交
93 94 95 96
  replacePage() {
    router.replace({
      uri: 'pages/detail/detail',
      params: {
Y
yamila 已提交
97 98
        data1: 'message'
      }
Z
zengyawen 已提交
99 100 101
    });
  }
}
L
lixinnan 已提交
102
export default new C()
Z
zengyawen 已提交
103 104 105
```


L
lixinnan 已提交
106
```ts
Z
zengyawen 已提交
107
// 在detail页面中
L
lixinnan 已提交
108 109
class Area {
  data:Record<string,string> = {'data1': 'default'}
Z
zengyawen 已提交
110
  onInit() {
L
lixinnan 已提交
111
    console.info('showData1:' + this.data)
Z
zengyawen 已提交
112 113
  }
}
L
lixinnan 已提交
114
export default new Area()
Z
zengyawen 已提交
115 116 117 118
```

## router.back

119
back(options?: BackRouterOptions): void
Z
zengyawen 已提交
120 121 122 123 124 125 126

返回上一页面或指定的页面。

**系统能力:** SystemCapability.ArkUI.ArkUI.Full

**参数:**

H
HelloCrease 已提交
127 128
| 参数名     | 类型                                      | 必填   | 说明                      |
| ------- | --------------------------------------- | ---- | ----------------------- |
L
luoying_ace_admin 已提交
129
| options | [BackRouterOptions](#backrouteroptions) | 否    | 详细请参考BackRouterOptions。 |
Z
zengyawen 已提交
130 131 132

**示例:**

L
lixinnan 已提交
133
```ts
Z
zengyawen 已提交
134
// index页面
L
lixinnan 已提交
135 136 137 138 139 140
import router from '@system.router';
class D{
  indexPushPage() {
    router.push({
      uri: 'pages/detail/detail'
    });
Z
zengyawen 已提交
141 142
  }
}
L
lixinnan 已提交
143
export default new D()
Z
zengyawen 已提交
144 145 146
```


L
lixinnan 已提交
147
```ts
Z
zengyawen 已提交
148
// detail页面
L
lixinnan 已提交
149 150 151 152
import router from '@system.router';
class E{
  detailPushPage() {
    router.push({
Y
yamila 已提交
153
      uri: 'pages/mall/mall'
L
lixinnan 已提交
154
    });
Z
zengyawen 已提交
155 156
  }
}
L
lixinnan 已提交
157
export default new E()
Z
zengyawen 已提交
158 159 160
```


L
lixinnan 已提交
161
```ts
Z
zengyawen 已提交
162
// mall页面通过back,将返回detail页面
L
lixinnan 已提交
163 164 165 166
import router from '@system.router';
class F{
  mallBackPage() {
    router.back();
Z
zengyawen 已提交
167 168
  }
}
L
lixinnan 已提交
169
export default new F()
Z
zengyawen 已提交
170 171 172
```


L
lixinnan 已提交
173
```ts
Z
zengyawen 已提交
174
// detail页面通过back,将返回index页面
L
lixinnan 已提交
175 176 177 178
import router from '@system.router';
class G{
  defaultBack() {
    router.back();
Z
zengyawen 已提交
179 180
  }
}
L
lixinnan 已提交
181
export default new G()
Z
zengyawen 已提交
182 183 184
```


L
lixinnan 已提交
185
```ts
Z
zengyawen 已提交
186
// 通过back,返回到detail页面
L
lixinnan 已提交
187 188 189 190
import router from '@system.router';
class H{
  backToDetail() {
    router.back({uri:'pages/detail/detail'});
Z
zengyawen 已提交
191 192
  }
}
L
lixinnan 已提交
193
export default new H()
Z
zengyawen 已提交
194 195
```

zyjhandsome's avatar
zyjhandsome 已提交
196
> **说明:**
Z
zengyawen 已提交
197 198
> 示例中的uri字段是页面路由,由配置文件中的pages列表指定。

L
luoying_ace_admin 已提交
199
## router.getParams<sup>7+</sup>
200 201 202 203 204 205 206 207 208

getParams(): ParamsInterface

获取当前页面的参数信息。

**系统能力:** SystemCapability.ArkUI.ArkUI.Full

**返回值:**

H
HelloCrease 已提交
209 210 211
| 类型                                  | 说明                    |
| ----------------------------------- | --------------------- |
| [ParamsInterface](#paramsinterface) | 详细请参见ParamsInterface。 |
212

Z
zengyawen 已提交
213 214 215 216 217 218 219 220 221 222
## router.clear

clear(): void

清空页面栈中的所有历史页面,仅保留当前页面作为栈顶页面。

**系统能力:** SystemCapability.ArkUI.ArkUI.Full

**示例:**

L
lixinnan 已提交
223 224 225 226 227
```ts
import router from '@system.router';
class I{
  clearPage() {
    router.clear();
Z
zengyawen 已提交
228 229
  }
}
L
lixinnan 已提交
230
export default new I()
Z
zengyawen 已提交
231 232 233 234 235 236 237 238 239 240 241 242
```

## router.getLength

getLength(): string

获取当前在页面栈内的页面数量。

**系统能力:** SystemCapability.ArkUI.ArkUI.Full

**返回值:**

H
HelloCrease 已提交
243 244
| 类型     | 说明                 |
| ------ | ------------------ |
Z
zengyawen 已提交
245 246 247 248
| string | 页面数量,页面栈支持最大数值是32。 |

**示例:**

L
lixinnan 已提交
249 250 251 252 253 254
```ts
import router from '@system.router';
class J{
  getLength() {
    let size = router.getLength();
    console.log('pages stack size = ' + size);
Z
zengyawen 已提交
255 256
  }
}
L
lixinnan 已提交
257
export default new J()
Z
zengyawen 已提交
258 259 260 261
```

## router.getState

262
getState(): RouterState
Z
zengyawen 已提交
263 264 265 266 267 268 269

获取当前页面的状态信息。

**系统能力:** SystemCapability.ArkUI.ArkUI.Full

**返回值:**

H
HelloCrease 已提交
270 271 272
| 参数类型                        | 说明                |
| --------------------------- | ----------------- |
| [RouterState](#routerstate) | 详细请参见RouterState。 |
Z
zengyawen 已提交
273 274 275

**示例:**

L
lixinnan 已提交
276 277 278 279
```ts
import router from '@system.router';
class K{
  getState() {
Y
yamila 已提交
280
    let page = router.getState();
Z
zengyawen 已提交
281 282 283 284 285
    console.log('current index = ' + page.index);
    console.log('current name = ' + page.name);
    console.log('current path = ' + page.path);
  }
}
L
lixinnan 已提交
286
export default new K()
Z
zengyawen 已提交
287 288 289 290
```

## router.enableAlertBeforeBackPage<sup>6+</sup>

291
enableAlertBeforeBackPage(options: EnableAlertBeforeBackPageOptions): void
Z
zengyawen 已提交
292 293 294 295 296 297 298

开启页面返回询问对话框。

**系统能力:** SystemCapability.ArkUI.ArkUI.Full

**参数:**

H
HelloCrease 已提交
299 300
| 参数名     | 类型                                       | 必填   | 说明                                     |
| ------- | ---------------------------------------- | ---- | -------------------------------------- |
301
| options | [EnableAlertBeforeBackPageOptions](#enablealertbeforebackpageoptions6) | 是    | 详细请参见EnableAlertBeforeBackPageOptions。 |
Z
zengyawen 已提交
302 303 304

**示例:**

L
lixinnan 已提交
305 306 307 308 309 310 311 312 313 314 315 316 317
```ts
import router from '@system.router';
class L{
  enableAlertBeforeBackPage() {
    router.enableAlertBeforeBackPage({
      message: 'Message Info',
      success: ()=> {
        console.log('success');
      },
      cancel: ()=> {
        console.log('cancel');
      }
    });
Z
zengyawen 已提交
318 319
  }
}
L
lixinnan 已提交
320
export default new L()
Z
zengyawen 已提交
321 322 323 324
```

## router.disableAlertBeforeBackPage<sup>6+</sup>

325
disableAlertBeforeBackPage(options?: DisableAlertBeforeBackPageOptions): void
Z
zengyawen 已提交
326 327 328 329 330 331 332

禁用页面返回询问对话框。

**系统能力:** SystemCapability.ArkUI.ArkUI.Full

**参数:**

H
HelloCrease 已提交
333 334 335
| 参数名     | 类型                                       | 必填   | 说明                                      |
| ------- | ---------------------------------------- | ---- | --------------------------------------- |
| options | [DisableAlertBeforeBackPageOptions](#disablealertbeforebackpageoptions6) | 否    | 详细请参见DisableAlertBeforeBackPageOptions。 |
Z
zengyawen 已提交
336 337 338

**示例:**

L
lixinnan 已提交
339 340 341 342 343 344 345 346 347 348 349 350
```ts
import router from '@system.router';
class Z{
  disableAlertBeforeBackPage() {
    router.disableAlertBeforeBackPage({
      success: ()=> {
        console.log('success');
      },
      cancel: ()=> {
        console.log('cancel');
      }
    });
Z
zengyawen 已提交
351 352
  }
}
L
lixinnan 已提交
353
export default new Z()
Z
zengyawen 已提交
354 355
```

356 357 358 359 360 361
## RouterOptions

定义路由器的选项。

**系统能力:**  以下各项对应的系统能力均为SystemCapability.ArkUI.ArkUI.Lite

L
luoying_ace_admin 已提交
362
| 名称   | 类型 | 必填 | 说明                                                         |
Y
yamila 已提交
363
| ------ | -------- | ---- | ------------------------------------------------------------ |
Y
yamila 已提交
364 365
| uri | string   | 是   | 目标页面的uri,可以是以下的两种格式:<br/>1. 页面的绝对路径,由config.json文件中的页面列表提供。例如:<br/>- pages/index/index<br/> -pages/detail/detail<br/>2. 特定路径。如果URI为斜杠(/),则显示主页。 |
| params | object   | 否   | 表示路由跳转时要同时传递到目标页面的数据。跳转到目标页面后,使用router.getParams()获取传递的参数,此外,在类web范式中,参数也可以在页面中直接使用,如this.keyValue(keyValue为跳转时params参数中的key值),如果目标页面中已有该字段,则其值会被传入的字段值覆盖。 |
366 367 368 369 370 371 372 373


## BackRouterOptions

定义路由器返回的选项。

**系统能力:**  以下各项对应的系统能力有所不同,详见下表。

L
luoying_ace_admin 已提交
374
| 名称   | 类型 | 必填 | 说明                                                         |
Y
yamila 已提交
375
| ------ | -------- | ---- | ------------------------------------------------------------ |
Y
yamila 已提交
376 377
| uri<sup>7+</sup> | string   | 否   | 返回到指定uri的界面,如果页面栈上没有uri页面,则不响应该情况。如果uri未设置,则返回上一页。 <br>**系统能力:** SystemCapability.ArkUI.ArkUI.Full |
| params<sup>7+</sup> | object   | 否   | 跳转时要同时传递到目标页面的数据。 <br>**系统能力:** SystemCapability.ArkUI.ArkUI.Lite |
378 379 380 381 382 383 384

## RouterState

定义路由器的状态。

**系统能力:**  以下各项对应的系统能力均为SystemCapability.ArkUI.ArkUI.Full

L
luoying_ace_admin 已提交
385
| 名称    | 类型   | 必填   | 说明                                 |
H
HelloCrease 已提交
386 387 388 389
| ----- | ------ | ---- | ---------------------------------- |
| index | number | 是    | 表示当前页面在页面栈中的索引。从栈底到栈顶,index从1开始递增。 |
| name  | string | 是    | 表示当前页面的名称,即对应文件名。                  |
| path  | string | 是    | 表示当前页面的路径。                         |
390 391 392

## EnableAlertBeforeBackPageOptions<sup>6+</sup>

393
定义EnableAlertBeforeBackPage选项。
394 395 396

**系统能力:**  以下各项对应的系统能力均为SystemCapability.ArkUI.ArkUI.Full

L
luoying_ace_admin 已提交
397
| 名称     | 类型                 | 必填 | 说明                                               |
G
gmy 已提交
398 399 400 401
| -------- | ------------------------ | ---- | -------------------------------------------------- |
| message  | string                   | 是   | 询问对话框内容。                                   |
| success  | (errMsg: string) => void | 否   | 用户选择对话框确认按钮时触发,errMsg表示返回信息。 |
| cancel   | (errMsg: string) => void | 否   | 用户选择对话框取消按钮时触发,errMsg表示返回信息。 |
L
luoying_ace_admin 已提交
402
| complete | () => void               | 否   | 当对话框关闭时触发该回调。                           |
403 404 405 406 407 408 409

## DisableAlertBeforeBackPageOptions<sup>6+</sup>

定义DisableAlertBeforeBackPage参数选项。

**系统能力:**  以下各项对应的系统能力均为SystemCapability.ArkUI.ArkUI.Full

L
luoying_ace_admin 已提交
410
| 名称     | 类型                 | 必填 | 说明                                               |
G
gmy 已提交
411 412 413
| -------- | ------------------------ | ---- | -------------------------------------------------- |
| success  | (errMsg: string) => void | 否   | 关闭询问对话框能力成功时触发,errMsg表示返回信息。 |
| cancel   | (errMsg: string) => void | 否   | 关闭询问对话框能力失败时触发,errMsg表示返回信息。 |
L
luoying_ace_admin 已提交
414
| complete | () => void               | 否   | 当对话框关闭时触发该回调。                           |
415 416 417

## ParamsInterface

Y
yamila 已提交
418 419 420
| 名称          | 参数类型 | 说明           |
| ------------- | -------- | -------------- |
| [key: string] | object   | 路由参数列表。 |