vue的watch属性

本文介绍了Vue中watch方法的三种用法:正常监听、带immediate和handler的使用以及深度监听。通过实例演示了如何设置初始值触发、对象属性深度监听,帮助开发者理解在数据变化时的高效响应机制。

**在vue中,使用watch来响应数据的变化。**主要有三种watch的用法。

正常监听

<div id="app">
<input tyoe="text" v-model="brand">
</div>
new Vue({
	el:"#app",
	data:{
		brand:'nike',
	},
	watch:{
		cityname(newbrand,oldbrand){
			//...
		}
	}
})

直接利用监听处理函数,当每次监听到brand值发生变化的时候,执行函数.

immediate和handler

这样使用watch时有一个特点,就是当值第一次绑定的时候,不会执行监听函数,只有值发生改变才会执行。如果我们需要在最初绑定值的时候也执行函数,则就需要用到immediate属性。

<body>
<div id="app">
    <input type="text" v-model="num">
</div>
<script src="vue.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            num: 1
        },
        watch: {
            num: {
            	// 数据发生变化就会调用这个函数  
                handler(newVal, oldVal) {
                    console.log('oldVal:', oldVal)
                    console.log('newVal:', newVal)
                },
                // 立即处理 进入页面就触发
                immediate: true
            }
        }
    })
</script>
</body>
普通的监听时候写的请示写的函数其实就是在写这个handler方法。
immediate表示在watch中首次绑定的时候,是否执行handler,值为true则表示在watch中声明的时候,就立即执行handler方法,值为false,则和一般使用watch一样,在数据发生变化的时候才执行handler。

deep

深度监听,当需要监听一个对象的改变时,普通的watch方法无法监听到对象内部属性的改变,只有data中的数据才能够监听到变化,此时就需要deep属性对对象进行深度监听。

<div id="app">
<input tyoe="text" v-model="brand">
</div>
new Vue({
	el:"#app",
	data:{
		brand:(name:'nike',id:"no1"),
	},
	watch:{
		cityname:{
			handler:(newbrand,oldbrand){
			//...
		},
		deep:true,
		immediate:true
		}
	}
})

设置deep: true 则可以监听到brand.name的变化,此时会给brand的所有属性都加上这个监听器,当对象属性较多时,每个属性值的变化都会执行handler。如果只需要监听对象中的一个属性值,则可以做以下优化:使用字符串的形式监听对象属性:


```javascript
new Vue({
	el:"#app",
	data:{
		brand:(name:'nike',id:"no1"),
	},
	watch:{
		'cityname.name':{
			handler:(newbrand,oldbrand){
			//...
		},
		deep:true,
		immediate:true
		}
	}
})
Vue 中,`watch` 是一个非常强大的工具,用于监听数据属性的变化并作出相应的处理。Vue 提供了多种方式来实现数据属性的监听,具体实现方式取决于数据的类型和监听需求。 ### 监听简单数据类型 对于简单的数据类型(如字符串、数字等),可以直接通过 `watch` 来监听其变化。例如: ```javascript export default { data() { return { message: 'Hello Vue' }; }, watch: { message(newVal, oldVal) { console.log(`新值: ${newVal}, 旧值: ${oldVal}`); } } }; ``` ### 监听对象或数组 当需要监听的对象或数组发生改变时,如果只监听对象本身,那么只有当整个对象被替换时才会触发回调。如果需要监听对象内部属性的变化,则需要启用 `deep` 选项: ```javascript export default { data() { return { user: { name: 'Tom', age: 20 } }; }, watch: { user: { handler(newVal, oldVal) { console.log('用户信息发生了变化'); }, deep: true // 开启深度监听 } } }; ``` ### 监听对象中的特定属性 如果只需要监听对象中的某个特定属性,可以通过返回该属性的函数形式来实现: ```javascript export default { data() { return { settings: { theme: 'dark', notifications: true } }; }, watch: { 'settings.theme': { handler(newVal, oldVal) { console.log(`主题从 ${oldVal} 改为 ${newVal}`); } } } }; ``` ### Vue 3 中的 `watch` 和 `watchEffect` Vue 3 引入了 Composition API,其中包括了 `watch` 和 `watchEffect` 函数,它们提供了更灵活的方式来监听响应式数据的变化。 #### 使用 `watch` Vue 3 的 `watch` 函数允许监听一个或多个响应式引用(如 `ref`)或响应式对象的属性,并且可以获取新旧值: ```javascript import { ref, watch } from 'vue'; const count = ref(0); watch(count, (newVal, oldVal) => { console.log(`count 从 ${oldVal} 变为 ${newVal}`); }); ``` #### 使用 `watchEffect` `watchEffect` 是一个更高级的函数,它会自动追踪其内部使用的响应式数据,并在其依赖的数据发生变化时重新运行: ```javascript import { ref, watchEffect } from 'vue'; const count = ref(0); watchEffect(() => { console.log(`当前 count 值为: ${count.value}`); }); ``` ### 结论 Vue 提供了多种灵活的方式来监听数据属性的变化,无论是简单的数据类型还是复杂的对象结构,都可以找到合适的方法来实现监听需求。选择合适的方式不仅可以提高代码的可读性和维护性,还能有效提升应用性能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值