iOS数据监听很简单,比如登录成功之后首页、个人中心页等很多页面都需要更新数据,只需要首页和个人中心页注册通知,登录成功之后发送通知,首页和个人中心页就能接收到该通知,此时就可以更新数据及界面,退出登录同理。
小程序更新页面数据就比较费劲,之前我都是获取上级页面,然后调用上级页面自定义方法loadNewData
方法来刷新上级页面数据。
//更新上级页面
var pages = getCurrentPages()
var prevPage = pages[pages.length - 2] //上一个页面
prevPage.loadNewData()
这种方法说实话也挺好用的,但是只能更新 wx.navigateTo
打开的页面。
官方也有页面间通信方法EventChannel,同样只能和wx.navigateTo
打开的页面进行通信。
今天遇到的需求是tabbar
切换的页面更新首页列表数据,只能各种百度,最终也实现的功能。
// 监听方法
watch: function (callback) {
var obj = this.globalData
Object.defineProperty(obj, "reloadIndex", {
configurable: true,
enumerable: true,
set: function (value) { //set方法
this._reloadIndex = value
callback(value)
}
})
},
globalData: {
reloadIndex: false //刷新首页
}
在首页调用
const app = getApp()
onLoad: function (options) {
app.watch(this.loadNewData)
}
在其他页面修改reloadIndex
的值
// 刷新首页列表
reloadIndexList: function () {
app.globalData.reloadIndex = true
}
小程序组件有数据监听器,也实现了某个功能。
/**
* 数据监听器
*/
observers: {
// 监听语音消息播放状态
'message.audioPlay': function (audioPlay) {
if (audioPlay == 1) {
this.beginAudioAnimation()
} else if (audioPlay == 0) {
this.endAudioAnimation()
}
}
}