//页面a跳转到页面b后let pages = getCurrentPages();let page = pages[pages.length - 2];//获取页面a//在页面b改变页面a中data的值page.setData({ productId:1}) |
流程:a-b-a
a-b是跳转 b-a的时候是返回
问题是这样的,偶然在airbnb的小程序里看到他们自定义的日期选择器,选完时间后返回,返回的页面能拿到日期选择器页面选择的时间,所以有了上面这串代码,不知道这么使用会不会出问题,
还有另外几个思路,可以把选择器的时间弄成全局的储存,或者存在storage里面,在页面a,onshow的时候解析,无疑是可以实现这个功能的,但是我想知道以上的代码会不会有问题,文档上写着不要改变页面栈,这样应该算是改了吧?

直接page setdata的方式不是不行,实在是有点丑陋
我们的思路是自己实现broadcast center
需要的页面注册一下通知接受
在业务逻辑点send broadcast
个人理解是不能修改是指修改页面栈的顺序,或者往里面插入之类的吧
我有很多地方也只直接page.setData的。。哈哈哈哈。。挂了再说吧
一开始我是用storage标记好,然后在onShow那里改~~后来,用了page.setData后,一发不可收拾,谁用谁知道,真的舒服~~哈哈哈哈。。挂了再说吧
6666
我也想用呀,所以过来问哈哈哈哈哈哈哈
哈哈哈哈 我也停不下来。。有些数据很多页面有相关性的,直接在把页面实例和相关变量或回调方法传给了 app.js里的数组。。然后修改的时候一个方法改完
求各位大佬指点
const notificationCenter = {notificationCenter: {},// 向通知中心注册一个监听者。// name: 监听的通知名称// observer: 监听者// action: 监听者收通知时调用的方法名,// func: 监听者收到通知时调用的函数,// action func 2选1register:function(name, observer, func) {if(!name || !observer)returnif(!func)returnconsole.log('注册通知:', name, observer)varcenter =this.notificationCentervarobjects = center[name]if(!objects) {objects = []}this.remove(name, observer)objects.push({observer: observer,func: func})center[name] = objects},// 从通知中心移除一个监听者remove:function(name, observer) {if(!name || !observer)returnconsole.log('移除通知:', name, observer)varcenter =this.notificationCentervarobjects = center[name]if(!objects) {return}varidxvarobjectfor(idx = 0; idx < objects.length; idx++) {varobj = objects[idx]if(obj.observer == observer) {object = objbreak}}if(object) {objects.splice(idx, 1)}center[name] = objects},// 通过通知中心发出通知// name: 通知名称// notification: 通知内容post:function(name, data) {const notification = {}notification.data = dataif(!name)returnconsole.log('发送通知:', name, data)varobjects =this.notificationCenter[name]if(!objects || objects.length == 0) {return}notification.name = nameobjects.forEach(function(object) {if(object.observer) {varfuncif(object.action) {func = object.observer[object.action]}if(!func) {func = object.func}if(func) {notification.observer = object.observerfunc(notification)}}})console.log('完成向 ', objects.length,' 个监听者发出通知:', name)}}exportdefaultnotificationCenter记得register的监听者要在合适的时机remove掉,譬如页面onUnload
记得给赞
我看看呀多谢大佬