微信小程序-页面间的通信与数据传递

小程序的页面跳转API像wx.navigateTo()、wx.redirectTo()之类的,都是跳转到一个全新的页面,当这个页面是表单的时候,有时候需要跳转到其它页面选取信息后再跳转回来,那之前填的信息就必须得存在。
方法一:
把当前页面数据放入本地缓存wx.setStorageSync,上一个页面再从缓存中取出wx.getStorageSync,同时退出登录时要清除缓存wx.clearStorageSync。处理不好的话容易出问题,不够优雅,建议使用方法二。
方法二:
在当前页设置上一页的data,例如

let pages = getCurrentPages();
    //let curPage = pages[pages.length - 1] //当前页面
    let prePage = pages[pages.length - 2];  //上一个页面
    // 直接调用上一个页面的setData()方法,把数据存到上一个页面中去
    prePage.setData({
      preData: 'xxxxx'
    })

当然这个“preData”必须是上一页有的数据才行,即必须在data里有定义
在上一个页面onShow里接收数据

onShow() {
      let pages = getCurrentPages();
      let curPage = pages[pages.length - 1];   // 当前页面
      this.preData = curPage.data.preData;
      }

直接调用方法名来更新数据 :
页面A:

Page({
     data: {
        name: ''
     },
     changeData(name) {
        this.setData({
            name: name
        })
     }
})

页面B;假设有一个文本框用于输入姓名,点击返回按钮后更新页面A的name

Page({
    //此方法用于文本框输入回调
    inputTyping: function (e) {
        //获取页面栈
        let pages = getCurrentPages();
        if(pages.length > 1){
            //上一个页面实例对象
            var prePage = pages[pages.length - 2];
            //关键在这里
            prePage.changeData(e.detail.value)
        }
    }
})

这样就可以实现数据传递给上一个页面,要注意页面A必须使用wx.navigateTo跳转到页面B,不能使用wx.redirectTo,这样会关闭上一个页面,导致页面B无法获取上一页Page实例。
方法三:
在app.js中设置全局变量,当前页赋值,上一页取之。

globalData: {
	userInfo: null,
  }

原文地址
https://blog.csdn.net/qappleh/article/details/83545736

你可能感兴趣的:(微信小程序-页面间的通信与数据传递)