Object.defineProperty在小程序中的简单使用
场景:
在app.js中定义了方法可以全局使用,想在其值发生改变时更改UI界面,发现app.js中不能使用setData方法,改值只能更改数据,UI无法同步更新,这时就需要用到defineProperty了,去注册一个监听,来监听值的改变,然后在注册监听的页面setData就可以了
上代码
//..........................app.js
/**
* 打印log日志(全局公用的方法)
*/
myconsole: function (newMsg) {
this.globalData.msg=newMsg
},
/**
* 监听log
*/
watchMyLog: function (method, msg) { //method是对应页面注册的方法,msg是需要监听的属性名
let obj = this.globalData
Object.defineProperty(obj, msg, {//obj是监听的对象,msg是监听对象里的属性名
configurable: true,
enumerable: true,
set: function (value) {
this._msg = value;//_msg是自定义的属性
method(value)//对应页面注册的方法
},
get: function (value) {
return this._msg
}
})
},
//.......................................index.js
/**
* 生命周期函数--监听页面加载
*/
onLoad: function () {
that = this;
app.watchMyLog(that.watchConsole, "msg")//注册这个监听,msg监听的值
app.myconsole('log来了。。。。。')
},
watchConsole:function(val) {
//得到改变的值去改变UI
that.setData({
msg:val
})
},