在app.js
中
observe(obj, key, fun, caller){
var val = obj[key];
Object.defineProperty(obj, key, {
configurable: true,
enumerable: true,
set(value) {
console.log('set ',key)
val = value;
fun.call(caller, value, val)
},
get() {
return val;
}
})
},
// 监听特定data对象的属性变化
// caller :保留this指针
watch(data, watch, caller){
Object.keys(watch).forEach(v => {
this.observe(data, v, watch[v], caller);
})
}
使用的方法很简单:
在相应的页面获取app
实例,然后在onLoad
中:
app.watch(this.data, this.watch, this);
再在page
的options
中添加字段:
watch: {
keyword(val, old) {
if (val !== '') {
console.log('watching')
throttle(this.onInputSearch, null, [val])
}
}
},
ps: 这样会引起渲染上的bug,原因分析及解决办法具体看下一篇博客。
VM424:5 Error: Expect END descriptor with depth 1 but get another