vue的监听属性可以用来监听vue的属性变化(data中的属性),当data中的属性发生变化则调用watch中该属性的handle方法。
1、使用格式
watch:{
【要监控的属性名】:{
deep:true,//如果要监控该属性中还有自己的属性并且所有的属性都要监控,则需要把deep设置为true,默认是false
immediate:true,//如果想要初始化是就调用handler方法则设置为true,默认为false
handler(newVal,oldVal){//监听的属性变化是调用handler方法 newVal 新值,oldVal 旧值
console.log("handler方法调用了")
}
},
//如果只需要handler方法可简写
【要监控的属性名】(){
console.log("handler方法调用了")
},
}
2、测试代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="vue.js"></script>
<title>vue的监听属性</title>
</head>
<body>
<div id="app">
msg:{{msg}}<input type="text" v-model="msg"></input>
</div>
<script>
const vm=new Vue({
el:"#app",
data:{
msg:"vue的监听属性",
a:{
b:1,
c:2
}
},
watch:{
// msg:{
// deep:true,
// immediate:true,
// handler(newVal,oldVal){
// console.log("handler方法调用了")
// }
// },
//如果msg属性直邮handler方法可以用简写方法
msg(){
console.log("handler方法调用了")
},
a:{
deep:true,
handler(newVal,oldVal){
console.log("a的handler方法调用了")
}
},
//如果只需要监听a的b属性可以这样写,一定要主要加单引号
'a.b':{
handler(newVal,oldVal){
console.log("a的handler方法调用了")
}
}
}
})
</script>
</body>
</html>