vue中的watch监听数据变化及watch中各属性的详解


Posted in Javascript onSeptember 11, 2018

首先确认 watch是一个对象,一定要当成对象来用。 

对象就有键,有值。

键:就是你要监控的那个家伙,比如说$route,这个就是要监控路由的变化。或者是data中的某个变量。
值可以是函数:就是当你监控的家伙变化时,需要执行的函数,这个函数有两个形参,第一个是当前值,第二个是变化后的值。

值也可以是函数名:不过这个函数名要用单引号来包裹。 

 第三种情况厉害了。

值是包括选项的对象:选项包括有三个。

1.第一个handler:其值是一个回调函数。即监听到变化时应该执行的函数。
2.第二个是deep:其值是true或false;确认是否深入监听。(一般监听时是不能监听到对象属性值的变化的,数组的值变化可以听到。)
3.第三个是immediate:其值是true或false;确认是否以当前的初始值执行handler的函数。

1、watch使用的几种方法

(1)通过watch监听data数据的变化,数据发生变化时,就会打印当前的值

watch: {
  data(val, newval) {
    console.log(val)
    console.log(newval)
  }
 }

(2)通过watch监听docData数据的变化,数据发生变化时,this.change_number++(使用深度监听)

watch: {
  docData: {
   handler(newVal) {
    this.change_number++
   },
   deep: true
  }
}

(3)通过watch监听data数据的变化,数据发生变化时,执行changeData方法

watch: {
  data: 'changeData' // 值可以为methods的方法名
},
methods: {
   changeData(curVal,oldVal){
    conosle.log(curVal,oldVal)

}
}

2、详解watch中的immediate、handler和deep属性

(1)immediate和handler

这样使用watch时有一个特点,就是当值第一次绑定时,不会执行监听函数,只有值发生改变时才会执行。如果我们需要在最初绑定值的时候也执行函数,则就需要用到immediate属性。

eg:

watch: {
   docData: {
    handler(newVal) {
      this.change_number++
    },
    immediate: true
   }
}

(2)deep

当需要监听一个对象的改变时,普通的watch方法无法监听到对象内部属性的改变,此时就需要deep属性对对象进行深度监听。

eg:
data() {
  return {
    docData: {
      'doc_id': 1,
      'tpl_data': 'abc'
    }
  }
},
watch: {
   docData: {
    handler(newVal) {
      this.change_number++
    },
    deep: true
  }  
}

设置deep:true则可以监听到docData.doc_id的变化,此时会给docData的所有属性都加上这个监听器,当对象属性较多时,每个属性值的变化都会执行handler。如果只需要监听对象中的一个属性值,则可以做以下优化:使用字符串的形式监听对象属性:

eg:
data() {
  return {
    docData: {
      'doc_id': 1,
      'tpl_data': 'abc'
    }
  }
},
watch: {
  'docData.doc_id': {
    handler(newVal, oldVal) {
      ......
    },
    deep: true
  }  
}

这样只会给对象的某个特定的属性加监听器

3、总结

数组(一维、多维)的变化不需要通过深度监听,对象数组中对象的属性变化则需要deep深度监听。

以上所述是小编给大家介绍的vue中的watch监听数据变化及watch中各属性的详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
通过继承IHttpHandle实现JS插件的组织与管理
Jul 13 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
Aug 18 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
Oct 16 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
Aug 28 Javascript
json定义及jquery操作json的方法
Oct 03 Javascript
第一次接触神奇的Bootstrap
Oct 14 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
May 05 Javascript
jQuery ajax读取本地json文件的实例
Oct 31 jQuery
利用JS动态生成隔行换色HTML表格的两种方法
Oct 09 Javascript
vue组件间的参数传递实例详解
Apr 26 Javascript
详解ECMAScript2019/ES10新属性
Dec 06 Javascript
vuex(vue状态管理)的特殊应用案例分享
Mar 03 Javascript
vue axios数据请求get、post方法及实例详解
Sep 11 #Javascript
js监听html页面的上下滚动事件方法
Sep 11 #Javascript
vue 使用html2canvas将DOM转化为图片的方法
Sep 11 #Javascript
Vue项目数据动态过滤实践及实现思路
Sep 11 #Javascript
使用vue.js在页面内组件监听scroll事件的方法
Sep 11 #Javascript
vue+axios+element ui 实现全局loading加载示例
Sep 11 #Javascript
Webpack之tree-starking 解析
Sep 11 #Javascript
You might like
同一空间绑定多个域名而实现访问不同页面的PHP代码
2006/12/06 PHP
php中判断字符串是否全是中文或含有中文的实现代码
2011/09/16 PHP
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
jQuery学习总结之元素的相对定位和选择器(持续更新)
2011/04/26 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
2012/12/07 Javascript
js拦截alert对话框另类应用
2013/01/16 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
JQuery中的html()、text()、val()区别示例介绍
2014/09/01 Javascript
简介AngularJS中$http服务的用法
2016/02/06 Javascript
编写高质量JavaScript代码的基本要点
2016/03/02 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
vuejs事件中心管理组件间的通信详解
2017/08/09 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
Python3读取文件常用方法实例分析
2015/05/22 Python
解决Python requests 报错方法集锦
2017/03/19 Python
Python实现动态图解析、合成与倒放
2018/01/18 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
浅谈Python中(&,|)和(and,or)之间的区别
2019/08/07 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
Python如何对齐字符串
2020/07/30 Python
python如何对链表操作
2020/10/10 Python
CSS3实现闪烁动画效果的方法
2015/02/09 HTML / CSS
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
HTML5 本地存储之如果没有数据库究竟会怎样
2013/04/25 HTML / CSS
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
职务聘任书范文
2014/03/29 职场文书
如何撰写一封出色的求职信
2014/04/27 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书