vue深度监听(监听对象和数组的改变)与立即执行监听实例


Posted in Javascript onSeptember 04, 2020

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() {
   return this.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.取消监听

var unwatch = vm.$watch('a', cb) // 返回一个取消监听函数

unwatch() // 取消观察函数

4.立即触发监听

我们有时会有这个需求,在页面初始化时执行某个监听。因此,我们可能会在 created 中去调用需要执行的监听代码,但现在我们可以使用 immediate 来实现这个功能。

watch: {
  'form.status'() {
   handler(val, oldVal) {
    // 执行一些操作
   },
   immediate: true
  }
 }

补充知识:vue watch监听数据,新老值一样?让其不一样吧!

我就废话不多说了,大家还是直接看代码吧~

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() {
    return JSON.parse(JSON.stringify(this.testData))
   }
  }

以上这篇vue深度监听(监听对象和数组的改变)与立即执行监听实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
打开超链需要“确认”对话框的方法
Mar 08 Javascript
javascript检查表单数据是否改变的方法
Jul 30 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
Aug 09 Javascript
浅谈jQuery构造函数分析
May 11 Javascript
Jquery结合HTML5实现文件上传
Jun 25 Javascript
jQuery Chart图表制作组件Highcharts用法详解
Jun 01 Javascript
jQuery基于ID调用指定iframe页面内的方法
Jul 06 Javascript
深入浅析javascript中的作用域(推荐)
Jul 19 Javascript
JS中SetTimeout和SetInterval使用初探
Mar 23 Javascript
React/Redux应用使用Async/Await的方法
Nov 16 Javascript
详解vue axios二次封装
Jul 22 Javascript
浅析JavaScript预编译和暗示全局变量
Sep 03 Javascript
Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法
Sep 04 #Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
Sep 04 #Javascript
在vue中axios设置timeout超时的操作
Sep 04 #Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
Sep 04 #Javascript
JavaScript中的执行环境和作用域链
Sep 04 #Javascript
Vue 禁用浏览器的前进后退操作
Sep 04 #Javascript
详解JavaScript数据类型和判断方法
Sep 04 #Javascript
You might like
php编写一个简单的路由类
2011/04/13 PHP
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
php getcwd与dirname(__FILE__)区别详解
2016/09/24 PHP
php微信公众号开发之关键词回复
2018/10/20 PHP
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
jQuery遮罩层效果实例分析
2016/01/14 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
2017/01/22 Javascript
JS验证全角与半角及相互转化的介绍
2017/05/18 Javascript
浅谈super-vuex使用体验
2018/06/25 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
2020/11/05 Python
利用CSS3实现开门效果实例源码
2016/08/22 HTML / CSS
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
夜班门卫岗位职责
2013/12/09 职场文书
暑期实习鉴定
2013/12/16 职场文书
银行竞聘演讲稿范文
2014/04/23 职场文书
大学开学计划书
2014/04/30 职场文书
体育教师求职信
2014/06/30 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
小学六一儿童节活动方案
2014/08/27 职场文书
家属联谊会致辞
2015/07/31 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书
《绝招》教学反思
2016/02/20 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python