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 相关文章推荐
jquery 可拖拽的窗体控件实现代码
Mar 21 Javascript
JavaScript 计算图片加载数量的代码
Jan 01 Javascript
JS代码优化技巧之通俗版(减少js体积)
Dec 23 Javascript
javascript修改表格背景色实例代码分享
Dec 10 Javascript
javascript实现网站加入收藏功能
Dec 16 Javascript
用jquery快速解决IE输入框不能输入的问题
Oct 04 Javascript
使用JS读取XML文件的方法
Nov 25 Javascript
Vue.js计算属性computed与watch(5)
Dec 09 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
May 14 Javascript
详解.vue文件解析的实现
Jun 11 Javascript
小程序实现搜索框
Jun 19 Javascript
vue element ui validate 主动触发错误提示操作
Sep 21 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
PHP5.2下chunk_split()函数整数溢出漏洞 分析
2007/06/06 PHP
理解php Hash函数,增强密码安全
2011/02/25 PHP
解析thinkphp的左右值无限分类
2013/06/20 PHP
PHP使用递归生成文章树
2015/04/21 PHP
PHP实现添加购物车功能
2017/03/06 PHP
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
javascript获取dom的下一个节点方法
2014/09/05 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
jQuery隐藏和显示效果实现
2016/04/06 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
jQuery ready()和onload的加载耗时分析
2016/09/08 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
快速了解vue-cli 3.0 新特性
2018/02/28 Javascript
详解bootstrap-fileinput文件上传控件的亲身实践
2019/03/21 Javascript
详解原生JS回到顶部
2019/03/25 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
Python的消息队列包SnakeMQ使用初探
2016/06/29 Python
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
python 地图经纬度转换、纠偏的实例代码
2018/08/06 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
为世界各地的女性设计和生产时尚服装:ROMWE
2016/09/17 全球购物
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
化学教师教学反思
2014/01/17 职场文书
学校文明单位申报材料
2014/05/06 职场文书
国际会计专业求职信
2014/08/04 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
Mysql基础知识点汇总
2021/05/26 MySQL
详解Vue router路由
2021/11/20 Vue.js
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android