众所周知,Vue中,可以使用监听属性观察来观察和响应Vue实例上的数据变化,那么小程序能不能实现这一点呢?
监听器的原理,是将数据中需监听的数据写在看对象中,并给其提供一个方法,当被监听的数据的值改变时,调用该方法强生的# 8203;& # 8203;
我们需要用到Javascript中的Object.defineProperty()方法,来手动劫持对象的getter/setter,从而实现给对象赋值时(调用setter),执行看对象中相对应的函数,达到监听效果。
Object.defineProperty()方法,会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回这个对象。
这里假定有多个页面需要监听需求,把监听方法写在app.js中,以便全局调用
onLaunch:函数(){},//设置监听器 看:函数(ctx obj) { 种(obj)。forEach(关键=比;{ this.observer (ctx)。数据、关键ctx。数据(关键)、功能(价值){ obj(关键)。调用(ctx、价值) }) }) },//监听属性,并执行监听函数 观察者:功能(数据、关键val, fn) { Object.defineProperty(数据、关键{ 可配置:没错, 可列举的:真的, 得到:函数(){ 返回瓦尔 }, 设置:函数(newVal) { 如果(newVal===val)返回 fn,,fn (newVal) val=newVal }, }) }
然后,在需要监听的页面onLoad中,调用看方法(其中测试是要监听的数据,当测试在其他方法中通过this.setData赋值后,观察就能监听到测试的变化了)
const应用=getApp () 页面({ 数据:{ 测试:0 }, onLoad:函数(){//调用监听器,监听数据变化 app.watch(这个,{ 测试:功能(newVal) { console.log (newVal) } }) }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。