当前位置: 首页 > 科技观察

从微信小程序到鸿蒙JS开发——页面路由

时间:2023-03-16 17:36:07 科技观察

更多内容请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com在项目中,页面之间的路由跳转是很常见的。鸿蒙JS开发提供了四种跳转页面的方式(轻量级智能穿戴只支持replace()),其中一些在之前的帖子中也有涉及,本文将详细讲解这四种API,并与微信小程序中类似的页面跳转方式进行对比。鸿蒙页面路由需要引入路由模块。从“@system.router”导入路由器;1、router.push()&wx.navigateTo()这两个方法是push栈跳转,要跳转到的目标页面被“压”在源页面上,源页面没有被破坏,原页面可以按返回键返回。router.push()有两个参数,uri指定页面路径,params指定跳转携带参数。只要目标页面data和params中有数据,不需要多写一行代码就可以接收到数据。第一页“推送下一页”按钮点击事件:pushNext(){router.push({uri:"pages/two/two",params:{method:"push"}})},data:{method:"",count:0},onShow(){this.count=router.getLength();},router.getLength()可以获取页面栈中的页面个数,鸿蒙页面栈支持的最大值为32.此时点击设备返回键返回首页。第二页“推送下一页”按钮点击事件: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()的参数是一样的,这里主要看页面栈中的页面数。第一页“替换下一页”点击事件:replaceNext(){router.replace({uri:"pages/two/two",params:{method:"replace"}})}第二页“替换下一页”点击事件:replaceNext(){router.replace({uri:"pages/three/three",params:{data:{name:"HarmonyOS",type:"phone",method:"replace"}}})}连续点击替换到第三页,页面栈中的页数一直为1。此时如果点击设备的返回键,会有退出APP的效果。wx.redirectTo()也有类似的效果,左上角的返回按钮变成了“home”按钮。微信小程序首页不会被破坏,在redirectTo重定向的页面点击“首页”按钮也可以返回首页。rediNext(){wx.redirectTo({url:'../two/two?method=redirectTo',success:res=>{console.log(res)}})},3、router.back()&wx.navigateBack()方法返回上一页,鸿蒙支持通过页面路径指定返回页面的路径。第三页“上一页,回到首页”点击事件:back1(){router.back();},back2(){router.back({path:"pages/index/index"})},back()方法将清除页面堆栈中返回的目标页面之上的所有页面。如果页面栈中只有一页,back()方法会退出APP。微信小程序的wx.navigateBack()方法可以通过delta参数指定返回多少层页面。如果增量大于现有页面的数量,它将返回到主页。naviBack(){wx.navigateBack({success:res=>{console.log(res);}})},naviIndex(){wx.navigateBack({delta:10,success:res=>{console.log(res);}})},如果页面栈中只有一页,则该方法不会触发,进入fail回调。不过,您仍然可以点击小程序左上角的“首页”按钮返回首页。4.router.clear()&wx.reLaunch()router.clear()是清除页面栈中剩余页面的方法,只保留当前页面。wx.reLaunch()可以实现清空所有页面并转到特定页面的方法。小程序主页仍然可以通过点击“主页”按钮返回。relaNext(){wx.reLaunch({url:'../three/three?method=reLaunch',success:res=>{console.log(res)}})},5.跳转到项目实践欢迎页面首先,使用replace()。分类->二级分类->商品列表->商品,使用push()。ProductDetails->Homepage,使用replace()和clear()去除多余的页面。更多信息请访问:Harmonyos.51cto.com,与华为官方合作打造的鸿蒙技术社区