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 24 Javascript
js几个验证函数代码
Mar 25 Javascript
常用Extjs工具:Extjs.util.Format使用方法
Mar 22 Javascript
chrome下img加载对height()的影响示例探讨
May 26 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
Sep 04 Javascript
使用jQuery仿苹果官网焦点图特效
Dec 23 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
Jun 23 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
Apr 26 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
Jan 02 Javascript
layui数据表格 table.render 报错的解决方法
Sep 29 Javascript
ES6 Generator基本使用方法示例
Jun 06 Javascript
JS+CSS实现过渡特效
Jan 02 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读取csv文件内容的详解
2013/06/18 PHP
php获取根域名方法汇总
2014/10/28 PHP
PHP如何使用Memcached
2016/04/05 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
JSON+Jquery省市区三级联动
2016/01/13 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
学习Node.js模块机制
2016/10/17 Javascript
JavaScript基本语法_动力节点Java学院整理
2017/06/26 Javascript
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
php中and 和 &&出坑指南
2018/07/13 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
echarts大屏字体自适应的方法步骤
2019/07/12 Javascript
原生JavaScript实现贪吃蛇游戏
2020/11/04 Javascript
JS闭包原理及其使用场景解析
2020/12/03 Javascript
网站渗透常用Python小脚本查询同ip网站
2017/05/08 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
pip matplotlib报错equired packages can not be built解决
2018/01/06 Python
python 删除非空文件夹的实例
2018/04/26 Python
pyspark 读取csv文件创建DataFrame的两种方法
2018/06/07 Python
python通过zabbix api获取主机
2018/09/17 Python
python使用Matplotlib画饼图
2018/09/25 Python
python如何删除文件中重复的字段
2019/07/16 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
英国汽车零件购物网站:GSF Car Parts
2019/05/23 全球购物
函数指针的定义是什么
2016/08/14 面试题
保密工作责任书
2014/04/16 职场文书
党的群众路线个人对照检查材料
2014/09/23 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS