今天看书的时候,留意到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