//页面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选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
记得给赞
我看看呀多谢大佬