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 相关文章推荐
一组JS创建和操作表格的函数集合
May 07 Javascript
Javascript学习笔记2 函数
Jan 11 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
Jul 10 Javascript
让页面上两个div中的滚动条(滑块)同步运动示例
Aug 07 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
Mar 31 Javascript
一篇文章掌握RequireJS常用知识
Jan 26 Javascript
JavaScript九九乘法口诀表的简单实现
Oct 04 Javascript
微信小程序 封装http请求实例详解
Jan 16 Javascript
深入理解Vue2.x的虚拟DOM diff原理
Sep 27 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
Apr 13 Javascript
配置一个vue3.0项目的完整步骤
Apr 26 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
Jan 28 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开发工具之vs2005图解
2008/01/12 PHP
PHP的autoload自动加载机制使用说明
2010/12/28 PHP
php做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
简述pm2常用命令集合及配置文件说明
2019/05/30 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
2019/08/02 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
JavaScript常用工具函数库汇总
2020/09/17 Javascript
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
2018/11/06 Python
pandas的相关系数与协方差实例
2019/12/27 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
西北政法大学自主招生自荐信
2014/01/29 职场文书
个人自我剖析材料
2014/02/07 职场文书
企业厂务公开实施方案
2014/03/26 职场文书
六一亲子活动总结
2014/07/01 职场文书
司法局群众路线教育实践活动整改措施
2014/09/17 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
婚内分居协议书范文
2014/11/26 职场文书
机器人总动员观后感
2015/06/09 职场文书
2016年小学生寒假家长评语
2015/10/10 职场文书
java设计模式--建造者模式详解
2021/07/21 Java/Android