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 相关文章推荐
javascript EXCEL 操作类代码
Jul 30 Javascript
基于jquery的loading 加载提示效果实现代码
Sep 01 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
Mar 14 Javascript
一个不错的字符串转码解码函数(自写)
Jul 31 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
Sep 23 Javascript
php利用curl获取远程图片实现方法
Oct 26 Javascript
学习JavaScript设计模式(策略模式)
Nov 26 Javascript
jQuery选择器实例应用
Jan 05 Javascript
jquery中each循环的简单回滚操作
May 05 jQuery
vue-router路由参数刷新消失的问题解决方法
Jun 17 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
Jan 02 jQuery
vue中的面包屑导航组件实例代码
Jul 01 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
咖啡风味 世界咖啡主要分布分布 咖啡的生长要求
2021/03/06 新手入门
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
2013/02/05 Javascript
jquery ready函数、css函数及text()使用示例
2013/09/27 Javascript
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
微信小程序url与token设置详解
2017/09/26 Javascript
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
10个最受欢迎的 JavaScript框架(推荐)
2019/04/24 Javascript
轻松学习JavaScript函数中的 Rest 参数
2019/05/30 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
2019/09/06 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
Vue toFixed保留两位小数的3种方式
2020/10/23 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
python基础教程之字典操作详解
2014/03/25 Python
Python日志模块logging简介
2015/04/13 Python
requests和lxml实现爬虫的方法
2017/06/11 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
python urllib爬虫模块使用解析
2019/09/05 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
小学生打架检讨书
2014/01/26 职场文书
运动会邀请函范文
2014/01/31 职场文书
学校先进集体事迹材料
2014/05/31 职场文书
企业优秀团员事迹材料
2014/08/20 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
演讲开头怎么书写?
2019/08/06 职场文书
Mysql Show Profile
2021/04/05 MySQL
Python中Numpy和Matplotlib的基本使用指南
2021/11/02 Python