小程序不提供相似于vue同样监听数据(vm.watch),当数据改变时触发回调检测改变数据类型是否符合要求。 javascript
如今,使用wach便可扩展相似vm.watch的功能
源码连接html
连接下载vue
import Watch from '../../libs/watch';
import Watch from '../../libs/watch'; let watch; Page({ data: { a: '1', b: { c: { d: 33 }, e: [1, 2, [3, 4]] } }, watch: { a: function(val, oldVal) { console.log('new: %s, old: %s', val, oldVal); }, 'b.c.d': function(val, oldVal) { console.log('new: %s, old: %s', val, oldVal); }, 'b.e[2][0]': function(val, oldVal) { console.log('new: %s, old: %s', val, oldVal); }, 'b.e[3][4]': function(val, oldVal) { console.log('new: %s, old: %s', val, oldVal); }, } })
能够将须要监听的数据放入watch里面,当数据改变时推送相应的订阅事件(注:不在data里面的数据项不会放入观察者列表,好比上面的'b.e[3][4]'
)java
watch = new Watch(this);
当watch建立示例初始化时会把监听数据项放入观察者列表里面git
watch.setData({ a: 2, 'b.c.d': 3, 'b.e[2][0]': 444, c: 123 }) watch.data('b.e[2][0]', 555);
等价于原生小程序this.setData
,会改变数据并更新视图,也会触发回调(假若有配置) github
示例:npm
watch.setData({ a: 2, 'b.c.d': 3, 'b.e[2][0]': 444, c: 123 }) //等价于 // this.setData({ // a: 2, // 'b.c.d': 3, // 'b.e[2][0]': 444, // c: 123 // })
等价于原生小程序this.data.a = 3
,以后改变数据不更新视图,也会触发回调(假若有配置) 小程序
示例:ide
watch.data('b.e[2][0]', 555); //等价于this.b.e[2][0] = 555
能根据提供的路径深度获取数据 工具
示例:
watch.get({ a: '1', b: { c: { d: 33 }, e: [1, 2, [3, 4]] } }, 'b.e[2][0]'); //3
删除观察者,改变数据不触发回调
示例:
watch.unSubscribe('b.e[2][0]');
npm test
git clone https://github.com/jayZOU/watch.git
打开小程序开发工具,新建项目,定位目录到watch/src