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 相关文章推荐
Span元素的width属性无效果原因及解决方案
Jan 15 Javascript
原生JS实现表单checkbook获取已选择的值
Jul 21 Javascript
JS 在指定数组中随机取出N个不重复的数据
Jun 10 Javascript
项目中常用的JS方法整理
Jan 30 Javascript
javascript中的previousSibling和nextSibling的正确用法
Sep 16 Javascript
javascript常用的设计模式
Feb 09 Javascript
JS html时钟制作代码分享
Mar 03 Javascript
Node.js连接mongodb实例代码
Jun 06 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
Jul 17 Javascript
React 组件间的通信示例
Jun 14 Javascript
vue created钩子函数与mounted钩子函数的用法区别
Nov 05 Javascript
JS前端基于canvas给图片添加水印
Nov 11 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运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
TextArea 控件的最大长度问题(js json)
2009/12/16 Javascript
js预载入和JavaScript Image()对象使用介绍
2011/08/28 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
js动态创建上传表单通过iframe模拟Ajax实现无刷新
2014/02/20 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
Vue父子之间值传递的实例教程
2020/07/02 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
vue实现PC端分辨率适配操作
2020/08/03 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
Etam德国:内衣精品店
2019/08/25 全球购物
电子商务专业个人的自我评价
2013/11/19 职场文书
生产副总岗位职责
2013/11/28 职场文书
预备党员思想汇报范文
2013/12/29 职场文书
2014年幼儿园植树节活动方案
2014/03/02 职场文书
社区义诊活动总结
2014/04/30 职场文书
詹天佑教学反思
2014/04/30 职场文书
运动会方阵口号
2014/06/07 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
汽车转让协议书范本
2014/12/07 职场文书
财产保全担保书
2015/01/20 职场文书
政协委员个人总结
2015/03/03 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server