使用Object.defineProperty(obj, prop, desc)来进行发布订阅
obj 是需要定义属性的当前对象
prop 当前需要定义的属性名
desc 属性描述符
App({
onLaunch: function () {
let that = this
// 在这里用定时器模拟网络请求的过程
setTimeout(function(){
that.globalData.chatList= '定时器推送的消息可以一直推送也能一直接收'
},3000)
},
// 这里这么写,是要在其他界面监听,而不是在app.js中监听,而且这个监听方法,需要一个回调方法。
watch(method){
var obj = this.globalData;
Object.defineProperty(obj,"chatList", {
configurable: true,//描述属性是否配置,以及可否删除 false 时,不能删除当前属性,且不能重新配置当前属性的描述符(有一个小小的意外:true时,可以删除当前属性,可以配置当前属性所有描述符。
enumerable: true,//描述属性是否会出现在for in 或者 Object.keys()的遍历中
set: function (value) {
this._chatList = value;
console.log('是否会被执行2')
method(value);
},
get:function(){
// 可以在这里打印一些东西,然后在其他界面调用getApp().globalData.chatList的时候,这里就会执行。
return this._chatList
}
})
},
globalData: {
_chatList:'原记录'
}
})
// 然后在其他的page页面中的生命周期中实现
onLoad: function (options) {
let that = this;
getApp().watch(that.watchBack)
},
watchBack(chatList){
console.log('监听到数据变化的值',chatList)
}