关于页面栈的一些问题?以及airbnb小程序日期选择器实现逻辑的讨论 [你这句话把握搞懵了。]

//页面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, 老厉害了。
    • 我也想用呀,所以过来问哈哈哈哈哈哈哈, 你不是妹子。不过去。
  • 求各位大佬指点, 小白不懂啊,请教大神
    • const notificationCenter = {   notificationCenter: {},     // 向通知中心注册一个监听者。   // name: 监听的通知名称   // observer: 监听者   // action: 监听者收通知时调用的方法名,   // func: 监听者收到通知时调用的函数,   // action func 2选1   register: function(name, observer, func) {     if (!name || !observer) return     if (!func) return       console.log('注册通知:', name, observer)       var center = this.notificationCenter     var objects = 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) return       console.log('移除通知:', name, observer)       var center = this.notificationCenter     var objects = center[name]     if (!objects) {       return     }       var idx     var object     for (idx = 0; idx < objects.length; idx++) {       var obj = objects[idx]       if (obj.observer == observer) {         object = obj         break       }     }     if (object) {       objects.splice(idx, 1)     }     center[name] = objects   },   // 通过通知中心发出通知   // name: 通知名称   // notification: 通知内容   post: function(name, data) {     const notification = {}     notification.data = data       if (!name) return       console.log('发送通知:', name, data)       var objects = this.notificationCenter[name]     if (!objects || objects.length == 0) {       return     }     notification.name = name     objects.forEach(function(object) {       if (object.observer) {         var func         if (object.action) {           func = object.observer[object.action]         }         if (!func) {           func = object.func         }         if (func) {           notification.observer = object.observer           func(notification)         }       }     })     console.log('完成向 ', objects.length, ' 个监听者发出通知:', name)   } }   export default notificationCenter 记得register的监听者要在合适的时机remove掉,譬如页面onUnload 记得给赞 , 说的貌似很有深意,你能一条一条说么?
    • 我看看呀多谢大佬, 能帮助你,是我的荣耀。