今天看书的时候,留意到vue
的侦听器watch
有两个参数,但是看官网Api
解释没看懂,也没有实践过,亲测一波
先看官网定义
deep
为了发现对象内部值的变化,可以在选项参数中指定 deep: true 。注意监听数组的变动不需要这么做。
watch
是一个对象,里面存放要侦听的对象,这个被侦听的对象可以有多个属性,一个是侦听后的处理函数,还有就是今天要看的这两个参数,所谓发现对象内部值的变化,指的是侦听一个复杂对象,并处理对象属性,举个🌰
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| <!DOCTYPE html> <html> <head> <title>demo</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="app"> <span>{{count}}</span> </div></body> <script type="text/javascript"> let vm = new Vue({ el: '#app', data: { count: 0, items: [{ id: 1, name: '蛋炒饭', count: 1, price: 5 },{ id: 2, name: '糖水', count: 2, price: 8 },{ id: 3, name: '排骨汤', count: 5, price: 10 }] }, watch: { "items": { handler() { console.log('数量变化') this.count = 0 this.items.forEach((item) => { this.count += item.count }); } }, } }) </script> </html>
|
修改下items
的数据,看看效果
毫无波澜…🤦♂️
那我们加一下deep: true
试试
可以了,侦听器被触发了,接下去看下另一个参数immediate
,顾名思义,就是立即执行,当vue
被渲染的时候就会触发watch