iOS數(shù)據(jù)監(jiān)聽很簡單,比如登錄成功之后首頁、個人中心頁等很多頁面都需要更新數(shù)據(jù),只需要首頁和個人中心頁注冊通知,登錄成功之后發(fā)送通知,首頁和個人中心頁就能接收到該通知,此時就可以更新數(shù)據(jù)及界面,退出登錄同理。
小程序更新頁面數(shù)據(jù)就比較費勁,之前我都是獲取上級頁面,然后調用上級頁面自定義方法loadNewData方法來刷新上級頁面數(shù)據(jù)。
//更新上級頁面
var pages = getCurrentPages()
var prevPage = pages[pages.length - 2] //上一個頁面
prevPage.loadNewData()
這種方法說實話也挺好用的,但是只能更新 wx.navigateTo打開的頁面。
官方也有頁面間通信方法EventChannel,同樣只能和wx.navigateTo打開的頁面進行通信。
今天遇到的需求是tabbar切換的頁面更新首頁列表數(shù)據(jù),只能各種百度,最終也實現(xiàn)的功能。
// 監(jiān)聽方法
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
}
小程序組件有數(shù)據(jù)監(jiān)聽器,也實現(xiàn)了某個功能。
/**
* 數(shù)據(jù)監(jiān)聽器
*/
observers: {
// 監(jiān)聽語音消息播放狀態(tài)
'message.audioPlay': function (audioPlay) {
if (audioPlay == 1) {
this.beginAudioAnimation()
} else if (audioPlay == 0) {
this.endAudioAnimation()
}
}
}
參考文章:
小程序實現(xiàn)數(shù)據(jù)監(jiān)聽
小程序如何在其他頁面監(jiān)聽globalData中值的變化?
微信小程序設置簡單的監(jiān)聽器