作者:汗青fullstack,來(lái)自授權(quán)地址
以下兩種場(chǎng)景,在微信小程序官方并沒(méi)有提供類似iOS的NSNotificationCenter 或者 Android的廣播類似的解決方案。
-
A頁(yè)面 -> B頁(yè)面,B頁(yè)面完成相關(guān)邏輯需要通知A頁(yè)面刷新數(shù)據(jù)(并傳值)
-
通知(廣播)已入棧并且注冊(cè)過(guò)通知的頁(yè)面(并傳值)
如果遇到以上的場(chǎng)景,要怎么處理呢?
在github上發(fā)現(xiàn)了WxNotificationCenter,下載地址:https://github.com/icindy/WxNotificationCenter WxNotificationCenter借鑒iOS開發(fā)中的NSNotificationCenter的消息模式進(jìn)行開發(fā)
簡(jiǎn)單的說(shuō)WxNotificationCenter是實(shí)現(xiàn)大跨度的通信機(jī)制,可以為兩個(gè)無(wú)引用關(guān)系的兩個(gè)對(duì)象進(jìn)行通信,即事件發(fā)出者和響應(yīng)者可以沒(méi)有任何耦合關(guān)系。
讓我們看看代碼中的使用
-
獲取到 WxNotificationCenter 將WxNotificationCenter.js文件加入項(xiàng)目目錄下
-
頁(yè)面中導(dǎo)入
var WxNotificationCenter = require('../../../vendors/WxNotificationCenter.js')
-
A頁(yè)面的Page生命周期中注冊(cè)、移除通知,及接收通知后響應(yīng)的fuction
onLoad: function () {
//注冊(cè)通知
var that = this
WxNotificationCenter.addNotification('NotificationName', that.didNotification, that)
},
onUnload: function () {
//移除通知
var that = this
WxNotificationCenter.removeNotification('NotificationName', that)
},
//通知處理
didNotification: function () {
//更新數(shù)據(jù)
this.setData({
})
},
-
B頁(yè)面處理完邏輯,發(fā)送通知
//發(fā)送通知(所有注冊(cè)過(guò)'NotificationName'的頁(yè)面都會(huì)接收到通知)
WxNotificationCenter.postNotificationName('NotificationName')
如何傳值?
obj 為字符串 或者 對(duì)象
-
WxNotificationCenter.postNotificationName('NotificationName',obj)
-
WxNotificationCenter.addNotification('NotificationName', that.didNotification, that)
didNotification: function (obj) {
//拿到值obj
},
自己寫了個(gè)Demo,感興趣的可以拉一下https://github.com/hanqingman/WxNotificationCenter-Demo
|