微信小程序页面间传值

1. 通过navigate或redirect时候的url来携带参数,然后在目标页面的onLoad函数参数中获取这些url参数

// 源页面A相关代码
wx.navigateTo({
 url: "/pages/mypage/mypage?a=1&b=2"
})

// 目标页面B相关代码
Page({
 onLoad: function (options) {
   var a = options.a; // 值:1
   var b = options.b; // 值:2
 }
})

但是,这种方式只有在目标页面还没有创建的时候,才有效。因为一个页面的onLoad方法在页面的生命周期中,只执行一次。
2. 使用全局数据存储

  • 将要传递的数据,存储在App对象上(比如globalData属性)。
  • 将要传递的数据,存储在小程序的本地数据缓存(Storage)中。
//=== 1. 存储到app对象上的方式 ========
var app = getApp()
app.globalData.mydata = {a:1, b:2};  //存储数据到app对象上
wx.navigateBack();  //返回上一个页面

//=== 2.存储到数据缓存的方式 =========
wx.setStorage({
 key: "mydata",
 data: {a:1, b:2},
 success: function () {
   wx.navigateBack();   //返回上一个页面
 }
})

不过,这种方式也是有很明显的缺点的。由于是全局数据存储,所以当你存入了那些数据后,必须谨慎的去管理这些全局数据(何时被销毁),否则一不小心,就会产生副作用。
3. 从页面路由栈中直接获取和操作目标Page对象

var pages = getCurrentPages();
var currPage = pages[pages.length - 1];   //当前页面
var prevPage = pages[pages.length - 2];  //上一个页面

//直接调用上一个页面的setData()方法,把数据存到上一个页面中去
prevPage.setData({
 mydata: {a:1, b:2}
})

可以关注来点儿干货呀公众号~

猜你喜欢

转载自blog.csdn.net/weixin_43164644/article/details/82786906
今日推荐