宝哥软件园

微信小程序页面间跳转传递参数方式总结

编辑:宝哥软件园 来源:互联网 时间:2021-08-22

前言

做微信小程序的时候,经常需要在页面之间传递参数。根据目前的项目经验,总结出以下方法:URL参数传递、缓存和方法调用。

网址传输参数

这个方法是最简单也是最常用的,这里就不多介绍了。

躲藏

虽然URL参数传输相对简单易用,但也有局限性,即只能传输简单的参数,对于复杂的参数无能为力。但是在很多情况下,我们需要传输结构复杂的数据,所以很多开发人员会想到使用缓存。

使用缓存有两种方式:小程序自带Storage和vuex。因为我们的项目是基于mpvue的,所以vuex也是附带使用的

存储:小程序提供的API可以方便地用于缓存操作,如wx.setStorage、wx.getStorage等。Vuex:这和我们通常做Vue项目时一样,在存储中声明一个变量来存储传递的参数。不管是哪种方式,思路都是一样的:跳转到页面前将参数保存到缓存中,进入页面后获取缓存的参数,然后清除缓存中的参数进行业务操作。近似伪码如下:

//pagea . vuegotopage b(){ let arg={ name : ' jack ',age : 9 }//先把参数保存到缓存中,比如这里用的是小程序的Storage。同步的方法是wx . setstoragency({ key : ' page arg ',data : arg })wx . navigateto({ URL : ' page b ' })}//page b . vue mounted(){//获取参数letarg=wx . getstoragency(' page arg ')//清除页面参数wx。remove storage ync(' page arg ')//执行业务处理/.}大致就是这样一个逻辑。也许访问缓存将被封装在特定的项目中,或者vuex中的方法不同,但想法是一样的。

这样可以实现功能,但总感觉不好。每次访问都很麻烦,也不高端。

于是,我们想到了一个传递它的方法,也就是今天的主角:方法调用。

方法调用

这种方式绝对不是最好最优雅的方案,因为我们也觉得有一些缺点,但目前使用起来还是很方便的。今天放出来,希望能看到如何修改,方便我们优化。

主要是用小程序提供的getCurrentPages方法,具体内容可以在文档中查看,我就直接映射到这里,因为文档很简单

小程序对页面的管理类似于浏览器中的历史,也有页面栈。每次页面跳转时,它都会将一个页面对象推入堆栈,当它返回时,它会弹出一个页面。当然,具体实现要复杂得多。

这里的官方观点是:不要试图修改页面堆栈,这就是为什么我说我们传递参数的方法不是很好。我们只是通过方法修改了这个页面堆栈的数据。

使用参数返回上一页

具体实施方式

//向前获取页面对象,类似于history.go (-n)函数getpagebyrecord(n){ let current pages=getcurrent pages()Return current pages[math . max(0,CurrentPages.length-(n 1))]}/*返回上一页并带回参数*参数functionName用于接收上一页带回的参数的方法的名称。注意:方法应该* parameter args *带回来的参数/函数返回预览(函数名,args){ if(function name){ let prev page=getpagebyrecord(1)wx . navigate back()//方法,手动调用页面的方法。并将页面参数作为方法参数传递到这里,例如prev page . data . $ prev page . data的root [0]类型. $ root[0][函数名]==' function ' prev page . data . $ root[0][函数名](.args)} Else {wx.navigateBack() }}例如在搜索页面(search.vue)中,有一个过滤条件是user,但是可以选择多个用户,并且在另一个页面(user-pick.vue)中选择该用户,这意味着从user-pick . vue跳回search.vue,并带回选中的那个。

//user-pick . vuememethods 3360 { onSelectConfirm(Users){ returnprevaeg(' onSelectUser ',Users)} }//user-pick . vuedata(){ return {//把具体的处理放到方法中。如果处理逻辑简单,你也可以把它放在这里选择用户:这个。onuserok}},方法: { ONU serok(users){//获取用户信息进行搜索//this.search。

回到上一页很容易理解,因为页面已经存在于页面栈中,所以可以获取并调用方法,但是实现跳转并不容易,因为每次跳转一个页面,都会在页面栈中添加一个新的对象,跳转之前无法获取。

这是我说的不太好,因为我们用的是setTimeout方法。

//前向页面回调方法函数navigateto (URL,函数名,args){ triggernextpagefn(' on hide ',函数名,args) //跳转后处理数据wx.navigateto ({URL})}函数重定向到(URL,函数名,args){ trigger next pagefn(' on unload ',函数名,args) //跳转后处理数据wx.redirectTo({url})}//通用方法函数触发器nextpagefn(类型,函数名,args){ let prepage=getcurpage()if(函数名){//保存当前变量((._ args)={ let olddeventfn=prepage[type]prepage[type]=()={//前进页更改onReady方法,Settimeoutsettimeout(()={ let new page=getcurpage())let old onReady=new page . onReady=function(){ new page . data . $ root[0]在此处用于类型new page . data . $ root[0][function name]=' function ' new page . data . $ root[0][function name](._ args)oldonready . apply(new page)new page。onready=oldonready } })prepage[type]=olddeventfn } })(.args)}}摘要

传播的方式太多了,选择适合自己的最重要。虽然我们写的传递参数的方法,微信官方并不支持,因为文件中明确表示页面栈不应该修改,但就目前的使用情况来看,并没有遇到什么问题,或许还没有。

如果本文介绍的转参考的方式有什么问题或者更好的修改建议,希望大家能帮助我们提出,共同进步。

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。谢谢你的支持。

更多资讯
游戏推荐
更多+