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 相关文章推荐
ExtJS 2.0实用简明教程之应用ExtJS
Apr 29 Javascript
jQuery实现瀑布流布局
Dec 12 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
Jan 13 Javascript
简介JavaScript中Math.LOG10E属性的使用
Jun 14 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
Dec 28 Javascript
ES6新特性七:数组的扩充详解
Apr 21 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
Oct 26 Javascript
AngularJs 禁止模板缓存的方法
Nov 28 Javascript
使用layui 渲染table数据表格的实例代码
Aug 19 Javascript
vue删除html内容的标签样式实例
Sep 13 Javascript
微信内置开发 iOS修改键盘换行为搜索的解决方案
Nov 06 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
Apr 20 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
在wamp集成环境下升级php版本(实现方法)
2013/07/01 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
PHP批量生成图片缩略图的方法
2015/06/18 PHP
PHP设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
轻轻松松学习JavaScript
2007/02/25 Javascript
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
js绘制一条直线并旋转45度
2020/08/21 Javascript
jQuery实现日历效果
2020/09/11 jQuery
10款最好的Web开发的 Python 框架
2015/03/18 Python
python编程开发之类型转换convert实例分析
2015/11/13 Python
Python中修改字符串的四种方法
2018/11/02 Python
PyQt5实现类似别踩白块游戏
2019/01/24 Python
Python多线程处理实例详解【单进程/多进程】
2019/01/30 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
python 微信好友特征数据分析及可视化
2020/01/07 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
Python存储读取HDF5文件代码解析
2020/11/25 Python
Python用Jira库来操作Jira
2020/12/28 Python
Python 生成短8位唯一id实战教程
2021/01/13 Python
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
html5默认气泡修改的代码详解
2020/03/13 HTML / CSS
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
PHP两种查询函数array/row的区别
2013/06/03 面试题
体育专业学生自我评价范文
2014/01/17 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
2015年学校食堂工作总结
2015/04/22 职场文书
驾驶员管理制度范本
2015/08/06 职场文书
2016国培学习心得体会
2016/01/08 职场文书
2016年小学端午节活动总结
2016/04/01 职场文书
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android
python数据分析之单因素分析线性拟合及地理编码
2022/06/25 Python