Vue进阶(八十九):watch 用法详解_vue watch冻结是什么

一、第一种方式

<input type="text" v-model="userName"/>  
//监听当userName值发生变化时触发
watch: {
	userName (newName, oldName) {
		console.log(newName)
	}
}

第一种方式有一个缺点: 就是当值第一次绑定的时候不会执行监听函数,只有当值改变的时候才会执行。

如果我们想在第一次绑定的时候就执行此监听函数,则需要设置immediatetrue。比如当父组件向子组件动态传值时,子组件props首次获取到父组件传来的默认值时,也需要执行函数,此时就需要将immediate设为true

二、第二种方式

watch: {
	userName: {
		handler (newName, oldName) {
			console.log(newName)
		},
		immediate: true
	}
}

immediate表示在watch中首次绑定的时候,是否执行handler,值为true则表示在watch中声明时,立即执行handler方法,值为false,则和一般使用watch一样,在数据发生变化的时候才执行handler

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

三、第三种方式

<input type="text" v-model="cityName.name" />
data (){
	return {
		cityName: 
		{
		name:'北京',
		location: '中国'
		}
	}
},
watch: {
	cityName: {
		handler(newName, oldName) {
			console.log(newName)
		},
		immediate: true,
		deep: true
	}
}

注:监测对象的时候,newVal == oldVal

此时会给cityName的所有属性都加上监听函数,如果属性较多时,每个属性值的变化都会执行handler。如果只需要监听对象中的一个属性值,则可以做以下优化:使用字符串的形式监听对象属性

watch: {
	'cityName.name': {
		handler(newName, oldName) {
			console.log(newName)
		},
		immediate: true,
		deep: true
	}
}

四、监听数组变化

1.watch能监听到数组push时的改变,例如

data () {
    return {
        demo: [1,2]
    }
},
 mounted (){
    window.myVue = this
 },
watch: {
    demo(val){
        console.log(val)
    }
},

myVue.demo.push(3)  //[1,2,3]

2.watch 不能检测以下变动的数组:

  • 当你利用索引直接设置一个项时,例如:myVue.demo[1] = 5
  • 当你修改数组的长度时,例如:myVue.demo.length = 2

此时,你可以删除原有键,再 $set 一个新的值,这样就可以触发watch



### 最后

编程基础的初级开发者,计算机科学专业的学生,以及平时没怎么利用过数据结构与算法的开发人员希望复习这些概念为下次技术面试做准备。或者想学习一些计算机科学的基本概念,以优化代码,提高编程技能。这份笔记都是可以作为参考的。

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/topics/618166371)**

![名不虚传!字节技术官甩出的"保姆级"数据结构与算法笔记太香了](https://img-blog.csdnimg.cn/img_convert/a3e940acdcd55765852a8bfe54482664.png)



  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值