从微信小程序到鸿蒙JS开发-页面路由
文章由鸿蒙社区产出,想要了解更多内容请前往:51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com
- 作者:Chris来源:鸿蒙社区|2021-02-23 12:25
在项目中,页面之间的路由跳转是十分普遍的。鸿蒙JS开发提供了四种页面跳转的方式(轻量级智能穿戴仅支持replace()),之前的帖子中也有涉及到一些,本文将详解这四个API并与微信小程序中类似的页面跳转方式做比较。
鸿蒙页面路由需导入router模块。import router from '@system.router';
1、router.push()&wx.navigateTo()
这两个方法都是压栈式跳转,即将跳转到的目标页面“压”在源页面上,源页面不销毁,按返回键即可返回源页面。
router.push()有两个参数,uri指定页面路径,params指定跳转携带参数。在目标页面data中只要有与params中即可接收数据,无需写额外一行代码。
第一页 "push 下一页"按钮点击事件:
- pushNext() {
- router.push({
- uri: "pages/two/two",
- params: {
- method: "push"
- }
- })
- },
- data: {
- method: "",
- count: 0
- },
- onShow() {
- this.count = router.getLength();
- },
router.getLength()可获取页面栈中页面数量,鸿蒙页面栈支持最大数值是32。
此时点击设备的返回按钮,即可返回第一页。
第二页 "push 下一页"按钮点击事件:
- pushNext() {
- router.push({
- uri: "pages/three/three",
- params: {
- data: {
- name: "HarmonyOS",
- type: "phone",
- method: "push"
- }
- }
- })
- },
带复杂参数跳转,也是完全支持的。
微信小程序的wx.navigateTo()方法效果一致,微信小程序中页面跳转的参数在url中携带,和统一资源定位符的规则一致。且支持success,fail,complete回调函数,也支持双向事件的触发。
第一页 "navigateTo 下一页"点击事件:
- naviNext() {
- wx.navigateTo({
- url: '../two/two?method=navigateTo',
- success: res => {
- console.log(res)
- }
- })
- },
第二页需在onLoad()中手动接收参数,参数被传递到options对象中。
- onLoad: function (options) {
- this.setData({
- method: options.method
- })
- },
如需携带复杂参数,只能通过events参数传递,且只有navigateTo()支持该参数。微信小程序支持页面栈最大页面数为10,该方法不支持跳转到app.json中配置的tabBar页面。
2、router.replace()&wx.redirectTo()
销毁当前页面并跳转页面,源页面在页面栈中被清除。
router.replace()参数和router.push()一致,这里主要看页面栈的页面数。
第一页"replace 下一页"点击事件:
- replaceNext() {
- router.replace({
- uri: "pages/two/two",
- params: {
- method: "replace"
- }
- })
- }
第二页"replace 下一页"点击事件:
- replaceNext() {
- router.replace({
- uri: "pages/three/three",
- params: {
- data: {
- name: "HarmonyOS",
- type: "phone",
- method: "replace"
- }
- }
- })
- }
连续点击replace到第三页,页面栈中页面数始终为1。
此时若点击设备返回键,则是退出APP的效果。
wx.redirectTo()效果类似,左上角返回按钮变为"home"按钮。微信小程序的首页是不会被销毁的,从redirectTo转到的页面点击"home"按钮也可以返回首页。
- rediNext() {
- wx.redirectTo({
- url: '../two/two?method=redirectTo',
- success: res => {
- console.log(res)
- }
- })
- },
3、router.back()&wx.navigateBack()
返回上一页的方法,鸿蒙支持传页面path指定返回的页面路径。
第三页"上一页、回首页"点击事件:
- back1() {
- router.back();
- },
- back2() {
- router.back({
- path: "pages/index/index"
- })
- },
back()方法会将页面栈中返回目标页面之上的页面全部清除。如页面栈中只有1个页面,back()方法会将APP退出。
微信小程序wx.navigateBack()方法可通过delta参数指定返回几层页面,如果 delta 大于现有页面数,则返回到首页。
- naviBack(){
- wx.navigateBack({
- success: res => {
- console.log(res);
- }
- })
- },
- naviIndex(){
- wx.navigateBack({
- delta: 10,
- success: res => {
- console.log(res);
- }
- })
- },
如果页面栈中只有1个页面,此方法将无法触发并进入fail回调。但仍可点击小程序左上角"home"按钮返回首页。
4、router.clear()&wx.reLaunch()
router.clear()是清空页面栈中其余页面的方法,仅保留当前页面。
wx.reLaunch()则可以实现清除所有页面,并转到特定页面的方法。小程序首页仍可以通过点击"home"按钮返回。
- relaNext() {
- wx.reLaunch({
- url: '../three/three?method=reLaunch',
- success: res => {
- console.log(res)
- }
- })
- },
5、项目实践
欢迎页面跳转到首页,使用replace()。
分类->二级分类->商品列表->商品,使用push()。
商品详情->首页,使用replace()并clear()掉多余页面。
【编辑推荐】
点赞 0
- 大家都在看
- 猜你喜欢
编辑推荐
- 24H热文
- 一周话题
- 本月获赞
- 坐在马桶上看算法:快速排序太厉害了,终于有人能把TCP/IP协议讲的明明白白了!花了一个星期,我终于把RPC框架整明白了!图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)TIOBE 2月榜单出炉,编程语言世界在过去几年中没有改变?为什么CTO、技术总监、架构师都不写代码,还这么牛?凉凉,老板叫我开发一个简单的工作流引擎...面向对象编程是计算机科学的最大错误
- 太厉害了,终于有人能把TCP/IP协议讲的明明白白了!花了一个星期,我终于把RPC框架整明白了!2月编程语言排行榜已出,你看出这点了吗?图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)TIOBE 2月榜单出炉,编程语言世界在过去几年中没有改变?6种微服务RPC框架,你知道几个?五大自动化测试的Python框架终于有人把Elasticsearch原理讲透了!
- 太厉害了,终于有人能把TCP/IP协议讲的明明白白了!花了一个星期,我终于把RPC框架整明白了!图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)6种微服务RPC框架,你知道几个?TIOBE 2月榜单出炉,编程语言世界在过去几年中没有改变?五大自动化测试的Python框架2月编程语言排行榜已出,你看出这点了吗?坐在马桶上看算法:快速排序
订阅专栏+更多
-
数据湖与数据仓库的分析实践攻略
助力现代化数据管理:数据湖与数据仓库的分析实践攻略共3章 | 创世达人6人订阅学习
-
云原生架构实践
新技术引领移动互联网进入急速赛道共3章 | KaliArch34人订阅学习
-
数据中心和VPDN网络建设案例
漫画+案例共20章 | 捷哥CCIE221人订阅学习
视频课程+更多
-
Asp.Net网站开发技术及音乐网站项目实战
讲师:张晨光3325人学习过
-
FFmpeg4.3开发系列之三:流媒体直播基础理论
讲师:梅老师1060人学习过
-
软件测试全栈系列课程
讲师:陈槐2408人学习过
专题推荐+更多
- 精选博文
- 论坛热帖
-
订阅51CTO邮刊
点击这里查看样刊

51CTO服务号

51CTO官微