- 需求的场景描述(希望解决的问题)
A页面点击图片,用户选择拍照,调用camera页面,使用navigateTo跳转到camera页面,camera页面拍照后,返回拍摄的照片到A页面,将页面base64处理传到后台服务。
现在跳转到camera页面后执行了拍照操作但是拍摄的照片没传到,具体看下面截图
截图1是camera.js中的,我通过setData和在app.JS中建立的参数赋值,但是在A页面都没读取到
截图2是A页面执行用户选择拍照的话,就navigateTo到camera页面,成功的话就执行callStage()方法
截图3是callStage方法,调用wx.getFileSystemManager().readFile方法,就是在readFile时获取不到camera页面返回的参数
截图4是编译的报错
- 希望提供的能力
wx.navigateBack()不能像其他导航一样通过url传参,因此只能使用其他方法:
先说两个可以实现但弊端很大的方法:
1、将数据存到app.globalData中,然后返回上一页面从全局数据中获取
弊端:数据为全局数据,必须谨慎维护,否则全局某处做出修改,牵一发而动全身
2、将数据存到本地缓存中(localStorage),然后从缓存中获取
弊端:本地缓存空间大小存在限制,若空间不足会自动清除其中最久未使用的数据,同样可能会造成意想不到的影响
so?还有一个比较完美的方法,就是:
使用getCurrentPages()函数获取页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。
官方文档参考:https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/route.html?search-key=getCurrentPages
var pages = getCurrentPages(); var currPage = pages[pages.length - 1]; //当前页面 var prevPage = pages[pages.length - 2]; //上一个页面 //直接调用上一个页面对象的setData()方法,把数据存到上一个页面中去 prevPage.setData({ data:data }); wx.navigateBack({ delta: 1 })
存到缓存