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多线程的实现方法
May 08 Javascript
textarea中的手动换行处理的jquery代码
Feb 26 Javascript
node.js中的fs.readSync方法使用说明
Dec 17 Javascript
JS 对象属性相关(检查属性、枚举属性等)
Apr 05 Javascript
jQuery固定元素插件scrolltofixed使用指南
Apr 21 Javascript
jquery使用each方法遍历json格式数据实例
May 18 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
Jun 08 Javascript
jquery 动态合并单元格的实现方法
Aug 26 Javascript
JS前向后瞻正则表达式定义与用法示例
Dec 27 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
Dec 05 Javascript
微信小程序使用前置摄像头拍照
Oct 22 Javascript
vue实现锚点定位功能
Jun 29 Vue.js
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
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
2011/06/16 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
php实现paypal 授权登录
2015/05/28 PHP
php实现头像上传预览功能
2017/04/27 PHP
javascript 面向对象编程基础:继承
2009/08/21 Javascript
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
2016/05/21 Javascript
分享19个JavaScript 有用的简写写法
2017/07/07 Javascript
JavaScript常用数组操作方法,包含ES6方法
2020/05/10 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
三步搞定:Vue.js调用Android原生操作
2020/09/07 Javascript
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python自动12306抢票软件实现代码
2018/02/24 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
如何导出python安装的所有模块名称和版本号到文件中
2020/06/05 Python
python和node.js生成当前时间戳的示例
2020/09/29 Python
用Python自动清理系统垃圾的实现
2021/01/18 Python
HTML5超文本标记语言的实现方法
2020/09/24 HTML / CSS
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
平面设计岗位职责
2013/12/14 职场文书
电信营业员自我评价分享
2014/01/17 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
工商局副局长个人对照检查材料
2014/09/25 职场文书
党的群众路线对照检查材料思想汇报
2014/09/25 职场文书
学习党章的体会
2014/11/07 职场文书
2014年党风建设工作总结
2014/11/19 职场文书
二年级学生期末评语
2014/12/26 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
放牛班的春天观后感
2015/06/01 职场文书
尼克胡哲观后感
2015/06/08 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
 分享一个Python 遇到数据库超好用的模块
2022/04/06 Python