一、監聽數組
1.watch能監聽到數組的push的改變,例如
data () {
return {
demo: [1,2]
}
},
mounted (){
window.myVue = this
},
watch: {
demo(val){
console.log(val)
}
},
myVue.demo.push(3) //[1,2,3]
2.watch 不能檢測以下變動的數組:
-
- 當你利用索引直接設置一個項時,例如:myVue.demo[1] = 5
- 當你修改數組的長度時,例如:myVue.demo.length = 2
這時候你可以刪除原有鍵,再 $set 一個新的,這樣就可以觸發watch
myVue.$set(myVue.demo,0,8) // [8,2,3]
3.更復雜一點,你想對數組嵌套對象進行監聽的時候,這時就需要深度監聽
data () {
return {
demo:[
{
name:'張三',
age:18
},
{
name:'李四',
age:20
}
]
}
},
mounted (){
window.myVue = this
},
watch: {
demo: {
handler (val) {
console.log(val)
},
// 這里是關鍵,代表遞歸監聽 demo 的變化
deep: true
}
},
myVue.demo[0].age = 30 //[{name:'張三',age:30},{name:'李四',age:20}]
二、監聽對象
1.可以類似上面數組的第3點
2.可以直接監聽對象中的值
data () {
return {
demo:{
name: '張三',
child: {
name: '李四',
age: 20
}
}
}
},
mounted (){
window.myVue = this
},
watch: {
'demo.child': {
handler: function (val) {
console.log(val)
},
deep: true
},
// 或者
'demo.name' (val) {
console.log(val)
}
}, myVue.demo.name = '王二' //王二
myVue.demo.age = '80' //{name:'李四',age:80}
