监听数组
data () {
return {
demo: [1,2]
}
},
watch: {
demo(val){
console.log(val)
}
}
- 可监听的数组变动:watch能监听到数组的
push操作引发的改变。
myVue.demo.push(3) //[1,2,3]
- 不可监听的数组变动及解决方法:watch不能检测
某个值变化或者长度变化引发的改变:- 利用索引直接设置一个项时,例如:
myVue.demo[1] = 5。 - 修改数组的长度时,例如:
myVue.demo.length = 2。
- 利用索引直接设置一个项时,例如:
解决方法是删除原有键,再使用$set设置一个新的,这样就可以触发watch,例如:
myVue.$set(myVue.demo,0,8) // [8,2,3]。
监听数组嵌套对象
data () {
return {
demo:[
{
name:'张三',
age:18
},
{
name:'李四',
age:20
}
]
}
},
若想对数组嵌套对象进行监听,需要深度监听。例如:
watch: {
demo: {
handler (val) {
console.log(val)
},
// 这里是关键,代表递归监听 demo 的变化
deep: true
}
}
myVue.demo[0].age = 30 //[{name:'张三',age:30},{name:'李四',age:20}]
监听对象
data () {
return {
demo:{
name: '张三',
child: {
name: '李四',
age: 20
}
}
}
},
- 类似数组深度监听的方式:可以像数组嵌套对象监听那样,通过深度监听来监听对象内部深层次的变化。
- 直接监听对象中的值:例如:
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}
930

被折叠的 条评论
为什么被折叠?



