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 相关文章推荐
文字不间断滚动(上下左右)实例代码
Apr 21 Javascript
jquery 实现窗口的最大化不论什么情况
Sep 03 Javascript
jQuery实现当按下回车键时绑定点击事件
Jan 28 Javascript
深入理解vue.js中$watch的oldvalue与newValue
Aug 07 Javascript
移动端触摸滑动插件swiper使用方法详解
Aug 11 Javascript
vue绑定设置属性的多种方式(5)
Aug 16 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
Mar 02 Javascript
微信小程序登录换取token的教程
May 31 Javascript
jquery登录的异步验证操作示例
May 09 jQuery
vue axios post发送复杂对象问题
Jun 04 Javascript
Vue记住滚动条和实现下拉加载的完美方法
Jul 31 Javascript
Vue获取微博授权URL代码实例
Nov 04 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 excel类 phpExcel使用方法介绍
2010/08/21 PHP
phpize的深入理解
2013/06/03 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
2017/03/14 PHP
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
Javascript数组中push方法用法分析
2016/10/31 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
2016/12/23 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
vue按需加载实例详解
2019/09/06 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
nodejs使用socket5进行代理请求的实现
2020/02/21 NodeJs
Vue 样式切换及三元判断样式关联操作
2020/08/09 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[01:13]2015国际邀请赛线下观战现场
2015/08/08 DOTA
python中使用序列的方法
2015/08/03 Python
python生成excel的实例代码
2017/11/08 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
甲午大海战观后感
2015/06/02 职场文书
新党员入党决心书
2015/09/22 职场文书
angular异步验证器防抖实例详解
2022/03/31 Javascript