vue深度监听(监听对象和数组的改变)与立即执行监听实例
1.vue中监听对象数据属性值的改变,可以使用深度监听
data(){ return{ form:{ status:'', cpufrequency:'', systemstacksize:'', scalabilityclass:'' } } }, watch:{ form:{//深度监听 handler(val,oldVal){ console.log('currentForm',val,oldVal) //但是这两个值打印出来却都是一样的,因为它们的引用指向同一个对象/数组 }, deep:true } }
注意:我们应尽量避免在监听方法中更改当前监听对象的属性值,以免再次触发监听函数
2.若只监听某个或部分属性值的变化,则可以配合计算属性computed来解决
data(){ return{ form:{ status:'', cpufrequency:'', systemstacksize:'', scalabilityclass:'' } } }, computed:{ status(){ returnthis.form.status } }, watch:{ status(){ console.log('currentVal',this.status) } }
当然,上面这种方法会多出一个计算属性,并不是最好的方法,通过查看官方api,其实还有一种方法:
data(){ return{ form:{ status:'', cpufrequency:'', systemstacksize:'', scalabilityclass:'' } } }, watch:{ 'form.status'(val,oldVal){ console.log('currentVal',val) } }
3.取消监听
varunwatch=vm.$watch('a',cb)//返回一个取消监听函数
unwatch()//取消观察函数
4.立即触发监听
我们有时会有这个需求,在页面初始化时执行某个监听。因此,我们可能会在created中去调用需要执行的监听代码,但现在我们可以使用immediate来实现这个功能。
watch:{ 'form.status'(){ handler(val,oldVal){ //执行一些操作 }, immediate:true } }
补充知识:vuewatch监听数据,新老值一样?让其不一样吧!
我就废话不多说了,大家还是直接看代码吧~
data:{ testData:{ dataInfo:{ a:'我是a', b:'我是b' } } }, watch:{ testData:{ handler:(val,olVal)=>{ console.log('我变化了',val,olVal) }, deep:true } }
如果testData发生了变化,就会打印出val,olVal,但是他们打印出来的结果都是一样的,因为数据同源。虽然可以监听到他的变化,但是要比较数据差异就不行了。如果想要得到不同的值可以结合计算属性。
data:{ testData:{ dataInfo:{ a:'我是a', b:'我是b' } } }, watch:{ testDataNew:{ handler:(val,olVal)=>{ console.log('我变化了',val,olVal) }, deep:true } }, computed:{ testDataNew(){ returnJSON.parse(JSON.stringify(this.testData)) } }
以上这篇vue深度监听(监听对象和数组的改变)与立即执行监听实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。