$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>
