监听ref对象
监听ref包裹的深层次对象,必须加deep才能读取属性
<template>
<div>
<input type="text" v-model="message.nav.bar.name">
</div>
</template>
<script setup lang='ts'>
import {ref,watch,reactive} from 'vue'
const message = ref({
nav: {
bar: {
name: '小满'
}
}
})
watch(message,(oldValue,newValue)=>{
console.log('旧的',oldValue);
console.log('新的',newValue);
},{
deep: true, //监听ref包裹的深层次对象,必须加deep才能读取属性
immediate: true //页面刷新就调用一次
})
</script>
监听reactive对象
监听reactive包裹的深层次对象,不需要加deep属性
<template>
<div>
<input type="text" v-model="message.nav.bar.name">
</div>
</template>
<script setup lang='ts'>
import {ref,watch,reactive} from 'vue'
const message = reactive({
nav: {
bar: {
name: '小满'
}
}
})
watch(message,(oldValue,newValue)=>{
console.log('旧的',oldValue);
console.log('新的',newValue);
})
</script>
只想监听一个对象的某个属性时
watch的第一个参数传入一个函数,return这个对象的属性
<template>
<div>
<input type="text" v-model="message.name">
<input type="text" v-model="message.name2">
</div>
</template>
<script setup lang='ts'>
import {ref,watch,reactive} from 'vue'
const message = reactive({
name: '小满',
name2: '小满的裤子',
})
watch(()=>message.name,(oldValue,newValue)=>{
console.log('旧的',oldValue);
console.log('新的',newValue);
})
</script>