小程序不提供相似於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