从微信小程序到鸿蒙js开发【11】——页面路由

时间:2023-02-15 20:25:20

在项目中,页面之间的路由跳转是十分普遍的。鸿蒙JS开发提供了四种页面跳转的方式(轻量级智能穿戴仅支持replace()),之前的帖子中也有涉及到一些,本文将详解这四个API并与微信小程序中类似的页面跳转方式做比较。

鸿蒙页面路由需导入router模块。import router from '@system.router';

1、router.push()&wx.navigateTo()

这两个方法都是压栈式跳转,即将跳转到的目标页面“压”在源页面上,源页面不销毁,按返回键即可返回源页面。

router.push()有两个参数,uri指定页面路径,params指定跳转携带参数。在目标页面data中只要有与params中即可接收数据,无需写额外一行代码。

从微信小程序到鸿蒙js开发【11】——页面路由

第一页 "push 下一页"按钮点击事件:

    pushNext() {
router.push({
uri: "pages/two/two",
params: {
method: "push"
}
})
},

从微信小程序到鸿蒙js开发【11】——页面路由

    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"
}
}
})
},

带复杂参数跳转,也是完全支持的。

从微信小程序到鸿蒙js开发【11】——页面路由

微信小程序的wx.navigateTo()方法效果一致,微信小程序中页面跳转的参数在url中携带,和统一资源定位符的规则一致。且支持success,fail,complete回调函数,也支持双向事件的触发。

从微信小程序到鸿蒙js开发【11】——页面路由

第一页 "navigateTo 下一页"点击事件:

  naviNext() {
wx.navigateTo({
url: '../two/two?method=navigateTo',
success: res => {
console.log(res)
}
})
},

从微信小程序到鸿蒙js开发【11】——页面路由

第二页需在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。

从微信小程序到鸿蒙js开发【11】——页面路由

从微信小程序到鸿蒙js开发【11】——页面路由

此时若点击设备返回键,则是退出APP的效果。

wx.redirectTo()效果类似,左上角返回按钮变为"home"按钮。微信小程序的首页是不会被销毁的,从redirectTo转到的页面点击"home"按钮也可以返回首页。

  rediNext() {
wx.redirectTo({
url: '../two/two?method=redirectTo',
success: res => {
console.log(res)
}
})
},

从微信小程序到鸿蒙js开发【11】——页面路由

3、router.back()&wx.navigateBack()

返回上一页的方法,鸿蒙支持传页面path指定返回的页面路径。

从微信小程序到鸿蒙js开发【11】——页面路由

第三页"上一页、回首页"点击事件:

    back1() {
router.back();
},
back2() {
router.back({
path: "pages/index/index"
})
},

back()方法会将页面栈中返回目标页面之上的页面全部清除。如页面栈中只有1个页面,back()方法会将APP退出。

微信小程序wx.navigateBack()方法可通过delta参数指定返回几层页面,如果 delta 大于现有页面数,则返回到首页。

从微信小程序到鸿蒙js开发【11】——页面路由

  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()是清空页面栈中其余页面的方法,仅保留当前页面。

从微信小程序到鸿蒙js开发【11】——页面路由

wx.reLaunch()则可以实现清除所有页面,并转到特定页面的方法。小程序首页仍可以通过点击"home"按钮返回。

  relaNext() {
wx.reLaunch({
url: '../three/three?method=reLaunch',
success: res => {
console.log(res)
}
})
},

从微信小程序到鸿蒙js开发【11】——页面路由

5、项目实践

欢迎页面跳转到首页,使用replace()。

分类->二级分类->商品列表->商品,使用push()。

从微信小程序到鸿蒙js开发【11】——页面路由

商品详情->首页,使用replace()并clear()掉多余页面。

从微信小程序到鸿蒙js开发【11】——页面路由

作者:Chris.

想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com

从微信小程序到鸿蒙js开发【11】——页面路由的更多相关文章

  1. 从微信小程序到鸿蒙js开发【12】——storage缓存&自动登录

    鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口] 正文: 在应用开发时,我们常需要将一些数据缓存到本地,以提升用户体验.比如在一个电商的app中,如果希望用户登录成功后,下次打 ...

  2. 从微信小程序到鸿蒙js开发【13】——list加载更多&回到顶部

    鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口] 目录: 1.list加载更多 2.list回到顶部 3.<从微信小程序到鸿蒙js开发>系列文章合集 1.list加 ...

  3. 从微信小程序到鸿蒙js开发【15】——JS调用Java

    鸿蒙入门指南,小白速来!0基础学习路线分享,高效学习方法,重点答疑解惑--->[课程入口] 目录:1.新建一个Service Ability2.完善代码逻辑3.JS端远程调用4.<从微信小 ...

  4. 从微信小程序到鸿蒙js开发【04】——list组件

    目录: 1.可滚动区域 2.list + list-item 3.list + list-item-group + list-item 1.可滚动区域 在许多场景中,页面会有一块区域是可滚动的,比如这 ...

  5. 从微信小程序到鸿蒙js开发【06】——swiper&amp&semi;animator&amp&semi;marquee

    目录: 1.swiper轮播图 2.image-animator幻灯片 3.marquee跑马灯 4.nginx动静分离 1.swiper轮播图 微信小程序的swiper组件中只能放置swiper-i ...

  6. 从微信小程序到鸿蒙js开发【08】——表单组件&amp&semi;注册登录模块

    目录: 1.登录模块 2.注册模块 3.系列文章导读 牛年将至,祝大家行行无bug,页页so easy- 在微信小程序中,提供了form组件,可以将input.picker.slider.button ...

  7. 从微信小程序到鸿蒙js开发【05】——tabs组件&amp&semi;每日新闻

    目录: 1.tabs, tab-bar, tab-content 2.tabs的事件处理 3.tabs实现的每日新闻 1.tabs, tab-bar, tab-content 上章说到,鸿蒙的list ...

  8. 微信小程序购物商城系统开发系列-目录结构

    上一篇我们简单介绍了一下微信小程序的IDE(微信小程序购物商城系统开发系列-工具篇),相信大家都已经蠢蠢欲试建立一个自己的小程序,去完成一个独立的商城网站. 先别着急我们一步步来,先尝试下写一个自己的 ...

  9. 微信小程序购物商城系统开发系列-工具篇

    微信小程序开放公测以来,一夜之间在各种技术社区中就火起来啦.对于它 估计大家都不陌生了,对于它未来的价值就不再赘述,简单一句话:可以把小程序简单理解为一个新的操作系统.新的生态,未来大部分应用场景都将 ...

随机推荐

  1. Eclipse&plus;maven创建webapp项目&lt&semi;二&gt&semi;(转)

    原文地址:http://www.cnblogs.com/candle806/p/3439469.html 1.开启eclipse,右键new-->other,如下图找到maven project ...

  2. 关于text-align无法居中的问题

    昨天项目,一直出现一个无法居中的问题,最后发现竟然是text-align的问题,才发现自己对text-align的理解还是不够透彻,于是在此再举例分析下. css中的元素一共有三类:块元素.行内块和内 ...

  3. Working with Numbers in PL&sol;SQL(在PL&sol;SQL中使用数字)

    This article gives you all the information you need in order to begin working with numbers in your P ...

  4. 项目与软件推荐之编辑器-QOwnNotes(刺激自己)

    项目与软件推荐之编辑器-QOwnNotes 今天推荐一款软件 QOwnNotes,是一款普通文本笔记软件.以某个路径为目录,罗列出目录下所有的 md 文件或者 txt 文件. 有如下亮点: 启动速度快 ...

  5. nodejs实践-代码组织

    nodejs实践-代码组织 laiqun@msn.cn Contents 1. 代码组织 1. 代码组织 更新版本 npm install -g n n latest 项目文件组织 MVC 前后端代码 ...

  6. jsp&plus;servlet登录框架模板

    一.建立一个名叫jsp_servlet的工程 二.建立一个AcountBean类和CheckAccount类 1.AcountBean类包含登录名(username)和登录密码(password) p ...

  7. Android使用Canvas实现跑马灯

    网上的很多的教程都是通过更改TextView的属性进行跑马灯的设计.这样做有很多的缺点: 1.如果TextView没有获取焦点,那么跑马灯的效果无法实现. 2.如果文本长度小于TextView的宽度, ...

  8. 虚拟机硬盘vmdk压缩瘦身并挂载到VirtualBox

    这个问题其实困扰了挺久的,一直没闲情去解决,网上搜索过很多压缩方法感觉都太麻烦太复杂,因最近在windows上搞docker就一并解决了. 压缩vmdk 首先下载DiskGenius,这工具很牛X,相 ...

  9. Navicat 用ssh通道连接时总是报错 (报错信息:SSH&colon;expected key exchange group packet form serve

    转:https://blog.csdn.net/qq_27463323/article/details/76830731 之前下了一个Navicat 11.0 版本 用ssh通道连接时总是报错 (报错 ...

  10. WPF Style

      <Application x:Class="WzlyTool.App" xmlns="http://schemas.microsoft.com/winfx/20 ...