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 相关文章推荐
DOM Scripting中的图片切换[兼容Firefox]
Jun 12 Javascript
JQuery each()函数如何优化循环DOM结构的性能
Dec 10 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
Jul 09 Javascript
extjs两个tbar问题探讨
Aug 08 Javascript
jquery中的过滤操作详细解析
Dec 02 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
Jan 28 Javascript
jQuery实现的进度条效果
Jul 15 Javascript
AngularJS过滤器filter用法实例分析
Nov 04 Javascript
浅谈Node.js爬虫之网页请求模块
Jan 11 Javascript
Angular6中使用Swiper的方法示例
Jul 09 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
Feb 27 jQuery
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
Dec 20 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生成短网址的3种方法代码实例
2014/07/08 PHP
深入理解PHP中mt_rand()随机数的安全
2017/10/12 PHP
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
javascript中的对象创建 实例附注释
2011/02/08 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
javascript中关于&& 和 || 表达式的小技巧分享
2015/04/10 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
详解关于微信setData回调函数中的坑
2019/02/18 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
python 异或加密字符串的实例
2018/10/14 Python
详解Python 正则表达式模块
2018/11/05 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
python multiprocessing模块用法及原理介绍
2019/08/20 Python
python取均匀不重复的随机数方式
2019/11/27 Python
python 实现分组求和与分组累加求和代码
2020/05/18 Python
Python函数调用追踪实现代码
2020/11/27 Python
香港No.1得奖零食网:香港零食大王
2016/07/22 全球购物
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
售后服务经理岗位职责
2014/02/25 职场文书
西式结婚主持词
2014/03/14 职场文书
国庆节演讲稿
2014/05/27 职场文书
生产操作工岗位职责
2014/09/16 职场文书
学校少先队工作总结
2015/08/12 职场文书
2016元旦晚会主持词开场白和结束语
2015/12/04 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书