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的表格隔行换色,移动换色,点击换色插件
Dec 22 Javascript
jquery isType() 类型判断代码
Feb 14 Javascript
javascript实现节点(div)名称编辑
Dec 17 Javascript
jQuery制作简洁的多级联动Select下拉框
Dec 23 Javascript
js判断手机和pc端选择不同执行事件的方法
Jan 30 Javascript
解决jQuery使用JSONP时产生的错误
Dec 02 Javascript
Bootstrap3.0学习教程之JS折叠插件
May 27 Javascript
JSONP原理及简单实现
Jun 08 Javascript
基于vue.js实现图片轮播效果
Dec 01 Javascript
Angular4学习教程之HTML属性绑定的方法
Jan 04 Javascript
JQuery特殊效果和链式调用操作示例
May 13 jQuery
vue封装数字翻牌器
Apr 20 Vue.js
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
解决cPanel无法安装php5.2.17
2014/06/22 PHP
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
2014/10/14 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
element-ui 限制日期选择的方法(datepicker)
2018/05/16 Javascript
详解react阻止无效重渲染的多种方式
2018/12/11 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
JavaScript设计模型Iterator实例解析
2020/01/22 Javascript
javascript解析json格式的数据方法详解
2020/08/07 Javascript
python使用opencv进行人脸识别
2017/04/07 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
python修改FTP服务器上的文件名
2019/09/11 Python
Django连接数据库并实现读写分离过程解析
2019/11/13 Python
适合Python初学者的一些编程技巧
2020/02/12 Python
如何利用python web框架做文件流下载的实现示例
2020/06/02 Python
使用Python构造hive insert语句说明
2020/06/06 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
婴儿地球:Baby Earth
2018/12/25 全球购物
波兰品牌鞋履在线商店:Eastend.pl
2020/01/11 全球购物
制药工程专业应届生求职信
2013/09/24 职场文书
大型晚会策划方案
2014/02/06 职场文书
市委常委班子党的群众路线教育实践活动整改措施
2014/10/02 职场文书
二审答辩状格式
2015/05/22 职场文书
2015年测量员工作总结
2015/05/23 职场文书