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 相关文章推荐
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
May 17 Javascript
javascript简单事件处理和with用法介绍
Sep 16 Javascript
ie 7/8不支持trim的属性的解决方案
May 23 Javascript
JS实现当前页居中分页效果的方法
Jun 18 Javascript
理解Javascript图片预加载
Feb 23 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
Dec 14 Javascript
js实现tab切换效果
Feb 16 Javascript
微信小程序获取手机号授权用户登录功能
Nov 09 Javascript
使用ajax的post同步执行(实现方法)
Dec 21 Javascript
浅谈Vue响应式(数组变异方法)
May 07 Javascript
js实现图片3D轮播效果
Sep 21 Javascript
vue使用refs获取嵌套组件中的值过程
Mar 31 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
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
php表单敏感字符过滤类
2014/12/08 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
关于JavaScript的一些看法
2009/05/27 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
2013/11/08 Javascript
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
JS简单计算器实例
2015/01/20 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
深入理解JS addLoadEvent函数
2016/05/20 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
2016/10/26 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
2016/11/15 Javascript
jquery mobile实现可折叠的导航按钮
2017/03/11 Javascript
详谈表单格式化插件jquery.serializeJSON
2017/06/23 jQuery
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
2017/08/04 jQuery
Angular实现的进度条功能示例
2018/02/18 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
[01:44]Ti10举办地公布
2019/08/25 DOTA
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
python实现复制文件到指定目录
2019/10/16 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
简历中自我评价分享
2013/10/09 职场文书
优秀安全员事迹材料
2014/05/11 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
认真学习保证书
2015/02/26 职场文书
2015年安全月活动总结
2015/03/26 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
于丹讲座视频观后感
2015/06/15 职场文书
中学团支部工作总结
2015/08/13 职场文书
小数乘法教学反思
2016/02/22 职场文书
教你用Python写一个植物大战僵尸小游戏
2021/04/25 Python