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