6.监视属性

文章详细介绍了Vue.js中watch对象的使用,包括监视属性的变化、深度监视、简写形式以及与计算属性的区别。watch不仅可以检测属性变化,还能执行异步操作,而计算属性则更简洁,主要依赖返回值。在处理this上下文时,Vue管理的函数适合用普通函数,非Vue管理的如定时器回调推荐使用箭头函数。
摘要由CSDN通过智能技术生成

监视属性

watch:{
	监视谁:{
	//当被监视对象发生变化时调用
		handler(newValue,oldValue){}
	}
}
vm.$watch('监视谁',{
	immediate:true,
	handler(){
		//balabla
	}
})
  • immediate:true, //初始化时让handler调用一下
  • @click=‘‘isHot = ! isHot’’ @click后可以加一些简单的语句,省去方法
  1. 当被监视的属性变化时, 回调函数自动调用, 进行相关操作
  2. 监视的属性必须存在,才能进行监视!!
  3. 监视的两种写法:
    (1).new Vue时传入watch配置
    (2).通过vm.$watch监视

深度监视

  • 监视多级结构中某个属性的变化
    • 想监视的属性是 numbers:{a:1,b:2} 里的a
watch:{
	'numbers.a':{handler(){}}
}
  • 想监视 numbers里的所有属性
    • 按上面方法,如果属性有很多个,一个一个写就很麻烦
    • 如果直接watch:{numbers:{}}这样只能监测numbers的地址变换,要彻底替换掉numbers才能触发
    • 所以应该用deep:true开启深度监视,numbers里的属性一变,就触发
  • Vue可以检测到多层级数据的改变,但是watch不行
  1. Vue中的watch默认不监测对象内部值的改变(一层)。
  2. 配置deep:true可以监测对象内部值改变(多层)。
    备注:
    (1).Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以!为了效率
    (2).使用watch时根据数据的具体结构,决定是否采用深度监视。

监视属性的简写

  • 当不需要immediate和deep配置项时,可以使用简写
watch:{
	监视谁(){
		//写handler里的东西
	}
}
vm.$watch('监视谁',function(newValue,oldValue){
	//handler里的东西
})

与计算属性对比

watch:{
	firstName(val){
		setTimeout(()=>{
			console.log(this)
			this.fullName = val + '-' + this.lastName
		},1000);
}
  • 监视属性更灵活,可以加异步定时器
    • 定时器的回调函数要写成箭头函数;
    • 回调函数不受vue管理,由js引擎来调用;
    • 如果写成普通函数,里面的this是window对象;
    • 箭头函数没有自己的this,所以里面的this会向外找,找到vm对象;
  • 计算属性是靠返回值,不能整这些,但是更简单

computed和watch之间的区别:

  1. computed能完成的功能,watch都可以完成。
  2. watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作。

两个重要的小原则:

  1. 所被Vue管理的函数,最好写成普通函数,这样this的指向才是vm 或 组件实例对象
  2. 所有不被Vue所管理的函数(定时器的回调函数、ajax的回调函数等、Promise的回调函数),最好写成箭头函数,这样this的指向才是vm 或 组件实例对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值