$watch和watch属性都是监听值的变化的,是同一个作用,但是有两个不同写法。
用法一:
this.$watch((newVal,oldVal)=>{ })
注意:这种方法是监听不到对象的变化的。
用法二:
watch:{
xxx:(newVal,oldVal)=>{ // xxx是data里的数据
}
}
监听对象某个值的变化
watch:{
"xxx.value":(newVal,oldVal)=>{ // xxx.value是data里对象的value
}
}
监听整个对象的变化(深度监听) ,handle方法:
//深度监听
obj:{
handler(newVal,oldVal){
},
deep:true
}
例子:
<template>
<div>
<input type="text" v-model="name">
{{name}}
<input type="text" v-model="age">
{{age}}
<input type="text" v-model="obj.id">
{{obj.id}}
<input type="text" v-model="obj">
{{obj}}
</div>
</template>
<script>
export default {
name: "Home",
data() {
return {
name: "",
age: "",
obj: {
id: "1",
addr: "gz"
}
};
},
created() {
this.obj = {
id:"99",
addr:"gd"
}
// 用法一: this.$watch("要监听的值",(oldVal,newVal)=>{ })
this.$watch("name", (newValue, oldValue) => {
console.log(newValue + "_新值");
console.log(oldValue + "_旧值");
});
//这样监听不到对象的变化的
this.$watch("obj", (newval, oldval) => {
console.log(newval);
console.log(oldval);
});
},
//用法二:
watch: {
age: (newValue, oldValue) => {
console.log(newValue);
console.log(oldValue);
},
// 监听对象中的某个属性的变化
"obj.id":(newVal,oldVal)=>{
console.log(newVal);
console.log(oldVal);
},
//深度监听
obj:{
handler(newVal,oldVal){
console.log(newVal);
console.log(oldVal);
},
deep:true
}
},
};
</script>
<style lang="css" scoped>
</style>