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 相关文章推荐
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
Jan 08 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
May 07 Javascript
div模拟滚动条效果示例代码
Oct 16 Javascript
ajax提交表单实现网页无刷新注册示例
May 08 Javascript
JavaScript jquery及AJAX小结
Jan 24 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
Aug 27 Javascript
js原生实现FastClick事件的实例
Nov 20 Javascript
JavaScript实现自动跳转文本功能
May 25 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
Sep 01 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
Feb 07 Javascript
JavaScript满天星导航栏实现方法
Mar 08 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
May 13 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将网址字符串转换成超链接(网址或email)
2010/05/25 PHP
php代码书写习惯优化小结
2013/06/20 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
thinkPHP实现签到功能的方法
2017/03/15 PHP
Git命令之分支详解
2021/03/02 PHP
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
React 使用Hooks简化受控组件的状态绑定
2019/03/18 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
vue cli安装使用less的教程详解
2019/07/12 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
[53:15]Newbee vs Pain 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
python 实现图片裁剪小工具
2021/02/02 Python
html5 canvas手势解锁源码分享
2020/01/07 HTML / CSS
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
zooplus德国:便宜地订购动物用品、动物饲料、动物食品
2020/05/06 全球购物
几个常见的软件测试问题
2016/09/07 面试题
自荐信模版
2013/10/24 职场文书
空乘英文求职信
2014/04/13 职场文书
化工实习心得体会
2014/09/09 职场文书
财务务虚会发言材料
2014/10/20 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
孕妇病假条怎么写
2015/08/17 职场文书
小学大队长竞选稿
2015/11/20 职场文书
党员公开承诺书2016
2016/03/24 职场文书
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS
聊聊redis-dump工具安装问题
2022/01/18 Redis