• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 页面路由
2
3> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明**
4>
5> - 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
6> - 页面路由需要在页面渲染完成之后才能调用,在onInit和onReady生命周期中页面还处于渲染阶段,禁止调用页面路由方法。
7
8## 导入模块
9
10```
11import router from '@ohos.router'
12```
13
14## 权限列表
15
1617
18## router.push
19
20push(options: RouterOptions): void
21
22跳转到应用内的指定页面。
23
24**系统能力:** SystemCapability.ArkUI.ArkUI.Full
25
26**参数:**
27| 参数名 | 类型 | 必填 | 说明 |
28| -------- | -------- | -------- | -------- |
29| options | [RouterOptions](#routeroptions) | 是 | 跳转页面描述信息。 |
30
31
32**示例:**
33  ```js
34  // 在当前页面中
35  export default {
36    pushPage() {
37      router.push({
38        url: 'pages/routerpage2/routerpage2',
39        params: {
40  	data1: 'message',
41          data2: {
42            data3: [123, 456, 789]
43  	},
44        },
45      });
46    }
47  }
48  ```
49  ```js
50  // 在routerpage2页面中
51  export default {
52    data: {
53      data1: 'default',
54      data2: {
55        data3: [1, 2, 3]
56      }
57    },
58    onInit() {
59      console.info('showData1:' + this.data1);
60      console.info('showData3:' + this.data2.data3);
61    }
62  }
63  ```
64
65
66## router.replace
67
68replace(options: RouterOptions): void
69
70用应用内的某个页面替换当前页面,并销毁被替换的页面。
71
72**系统能力:** SystemCapability.ArkUI.ArkUI.Full
73
74**参数:**
75| 参数名 | 类型 | 必填 | 说明 |
76| -------- | -------- | -------- | -------- |
77| options | [RouterOptions](#routeroptions) | 是 | 替换页面描述信息。 |
78
79**示例:**
80
81  ```js
82  // 在当前页面中
83  export default {
84    replacePage() {
85      router.replace({
86        url: 'pages/detail/detail',
87        params: {
88          data1: 'message',
89        },
90      });
91    }
92  }
93  ```
94
95  ```js
96  // 在detail页面中
97  export default {
98    data: {
99      data1: 'default'
100    },
101    onInit() {
102      console.info('showData1:' + this.data1)
103    }
104  }
105  ```
106
107## router.back
108
109back(options?: RouterOptions ): void
110
111返回上一页面或指定的页面。
112
113**系统能力:** SystemCapability.ArkUI.ArkUI.Full
114
115**参数:**
116| 参数名 | 类型 | 必填 | 说明 |
117| -------- | -------- | -------- | -------- |
118| options | [RouterOptions](#routeroptions) | 是 | 返回页面描述信息,其中参数url指路由跳转时会返回到指定url的界面,如果页面栈上没有url页面,则不响应该情况。如果url未设置,则返回上一页,页面栈里面的page不会回收,出栈后会回收。 |
119
120**示例:**
121  ```js
122  // index页面
123  export default {
124    indexPushPage() {
125      router.push({
126        url: 'pages/detail/detail',
127      });
128    }
129  }
130  ```
131
132  ```js
133  // detail页面
134  export default {
135    detailPushPage() {
136      router.push({
137        url: 'pages/mall/mall',
138      });
139    }
140  }
141  ```
142
143  ```js
144  // mall页面通过back,将返回detail页面
145  export default {
146    mallBackPage() {
147      router.back();
148    }
149  }
150  ```
151
152  ```js
153  // detail页面通过back,将返回index页面
154  export default {
155    defaultBack() {
156      router.back();
157    }
158  }
159  ```
160
161  ```js
162  // 通过back,返回到detail页面
163  export default {
164    backToDetail() {
165      router.back({url:'pages/detail/detail'});
166    }
167  }
168  ```
169
170## router.clear
171
172clear(): void
173
174清空页面栈中的所有历史页面,仅保留当前页面作为栈顶页面。
175
176**系统能力:** SystemCapability.ArkUI.ArkUI.Full
177
178**示例:**
179  ```js
180  export default {
181    clearPage() {
182      router.clear();
183    }
184  }js
185  ```
186
187## router.getLength
188
189getLength(): string
190
191获取当前在页面栈内的页面数量。
192
193**系统能力:** SystemCapability.ArkUI.ArkUI.Full
194
195**返回值:**
196| 类型 | 说明 |
197| -------- | -------- |
198| string | 页面数量,页面栈支持最大数值是32。 |
199
200**示例:**
201  ```js
202  export default {
203    getLength() {
204      var size = router.getLength();
205      console.log('pages stack size = ' + size);
206    }
207  }
208  ```
209
210## router.getState
211
212getState(): RouterState
213
214获取当前页面的状态信息。
215
216**系统能力:** SystemCapability.ArkUI.ArkUI.Full
217
218**返回值:**
219
220| 类型                        | 说明           |
221| --------------------------- | -------------- |
222| [RouterState](#routerstate) | 页面状态信息。 |
223## RouterState
224页面状态信息。
225
226**系统能力:** 以下各项对应的系统能力均为SystemCapability.ArkUI.ArkUI.Full227
228| 名称 | 类型 | 说明 |
229| -------- | -------- | -------- |
230| index | number | 表示当前页面在页面栈中的索引。<br/>>&nbsp;![icon-note.gif](public_sys-resources/icon-note.gif)&nbsp;**说明:**<br/>>&nbsp;从栈底到栈顶,index从1开始递增。 |
231| name | string | 表示当前页面的名称,即对应文件名。 |
232| path | string | 表示当前页面的路径。 |
233
234**示例:**
235  ```js
236  export default {
237    getState() {
238      var page = router.getState();
239      console.log('current index = ' + page.index);
240      console.log('current name = ' + page.name);
241      console.log('current path = ' + page.path);
242    }
243  }
244  ```
245
246## router.enableAlertBeforeBackPage
247
248enableAlertBeforeBackPage(options: EnableAlertOptions): void
249
250开启页面返回询问对话框。
251
252**系统能力:** SystemCapability.ArkUI.ArkUI.Full
253
254**参数:**
255| 参数名 | 类型 | 必填 | 说明 |
256| -------- | -------- | -------- | -------- |
257| options | [EnableAlertOptions](#enablealertoptions) | 是 | 文本弹窗信息描述。 |
258
259**示例:**
260
261  ```js
262  export default {
263    enableAlertBeforeBackPage() {
264      router.enableAlertBeforeBackPage({
265        message: 'Message Info',
266      });
267    }
268  }
269  ```
270## EnableAlertOptions
271
272页面返回询问对话框选项。
273
274**系统能力:** 以下各项对应的系统能力均为SystemCapability.ArkUI.ArkUI.Full275
276| 名称 | 类型 | 必填 | 说明 |
277| -------- | -------- | -------- | -------- |
278| message | string | 是 | 询问对话框内容。 |
279
280## router.disableAlertBeforeBackPage
281
282disableAlertBeforeBackPage(): void
283
284禁用页面返回询问对话框。
285
286**系统能力:** SystemCapability.ArkUI.ArkUI.Full
287
288**示例:**
289  ```js
290  export default {
291    disableAlertBeforeBackPage() {
292      router.disableAlertBeforeBackPage();
293    }
294  }
295  ```
296
297##  router.getParams
298
299getParams(): Object
300
301获取发起跳转的页面往当前页传入的参数。
302
303**系统能力:** SystemCapability.ArkUI.ArkUI.Full
304
305**返回值:**
306
307| 类型   | 说明                               |
308| ------ | ---------------------------------- |
309| Object | 发起跳转的页面往当前页传入的参数。 |
310
311**示例:**
312
313- 类Web范示例
314  ```js
315  // 在当前页面中
316  export default {
317    pushPage() {
318      router.push({
319        url: 'pages/detail/detail',
320        params: {
321          data1: 'message',
322        },
323      });
324    }
325  }
326  ```
327  ```js
328  // 在detail页面中
329  export default {
330    onInit() {
331      console.info('showData1:' + router.getParams()[data1]);
332    }
333  }
334  ```
335
336- 声明式示例
337
338  ```ts
339  //通过router.push跳转至目标页携带params参数
340  import router from '@ohos.router'
341
342  @Entry
343  @Component
344  struct Index {
345    async  routePage() {
346      let options = {
347        url: 'pages/second',
348        params: {
349          text: '这是第一页的值',
350          data: {
351            array: [12, 45, 78]
352          },
353        }
354      }
355      try {
356        await router.push(options)
357      } catch (err) {
358        console.info(` fail callback, code: ${err.code}, msg: ${err.msg}`)
359      }
360    }
361
362    build() {
363      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
364          Text('这是第一页')
365            .fontSize(50)
366            .fontWeight(FontWeight.Bold)
367        Button() {
368          Text('next page')
369            .fontSize(25)
370            .fontWeight(FontWeight.Bold)
371        }.type(ButtonType.Capsule)
372            .margin({ top: 20 })
373            .backgroundColor('#ccc')
374            .onClick(() => {
375              this.routePage()
376        })
377      }
378      .width('100%')
379      .height('100%')
380    }
381  }
382  ```
383
384  ```ts
385  //在second页面中接收传递过来的参数
386  import router from '@ohos.router'
387
388  @Entry
389  @Component
390  struct Second {
391    private content: string = "这是第二页"
392    @State text: string = router.getParams()['text']
393    @State data: any = router.getParams()['data']
394    @State secondData : string = ''
395
396    build() {
397      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
398        Text(`${this.content}`)
399          .fontSize(50)
400          .fontWeight(FontWeight.Bold)
401        Text(this.text)
402          .fontSize(30)
403          .onClick(()=>{
404            this.secondData = (this.data.array[1]).toString()
405          })
406        .margin({top:20})
407        Text('第一页传来的数值' + '  ' + this.secondData)
408          .fontSize(20)
409          .margin({top:20})
410          .backgroundColor('red')
411      }
412      .width('100%')
413      .height('100%')
414    }
415  }
416  ```
417
418## RouterOptions
419
420路由跳转选项。
421
422**系统能力:** 以下各项对应的系统能力均为SystemCapability.ArkUI.ArkUI.Lite423
424| 名称 | 类型 | 必填 | 说明 |
425| -------- | -------- | -------- | -------- |
426| url | string | 是 | 表示目标页面的uri,可以用以下两种格式:<br/>-&nbsp;页面绝对路径,由配置文件中pages列表提供,例如:<br/>&nbsp;&nbsp;-&nbsp;pages/index/index<br/>&nbsp;&nbsp;-&nbsp;pages/detail/detail<br/>-&nbsp;特殊值,如果uri的值是"/",则跳转到首页。 |
427| params | Object | 否 | 跳转时要同时传递到目标页面的数据,跳转到目标页面后,参数可以在页面中直接使用,如this.data1(data1为跳转时params参数中的key值)。如果目标页面中已有该字段,则其值会被传入的字段值覆盖。 |
428
429
430  > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
431  > 页面路由栈支持的最大Page数量为32。
432
433