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 相关文章推荐
$.ajax json数据传递方法
Nov 19 Javascript
用jQuery模拟页面加载进度条的实现代码
Dec 19 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
Jan 11 Javascript
html组件不可输入(只读)同时任何组件都有效
Apr 01 Javascript
在百度知道团队中快速审批新成员的js脚本
Feb 02 Javascript
javascript中new关键字详解
Dec 14 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
Nov 18 Javascript
js以及jquery实现手风琴效果
Apr 17 Javascript
javascript 操作cookies详解及实例
Feb 22 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
Jul 19 Javascript
JS+DIV实现拖动效果
Feb 11 Javascript
vue如何使用rem适配
Feb 06 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
header()函数使用说明
2006/11/23 PHP
php 调用远程url的六种方法小结
2009/11/02 PHP
PHP输入流php://input介绍
2012/09/18 PHP
Php output buffering缓存及程序缓存深入解析
2013/07/15 PHP
Yii编程开发常见调用技巧集锦
2016/07/15 PHP
功能强大的php文件上传类
2016/08/29 PHP
SlideView 图片滑动(扩展/收缩)展示效果
2010/08/01 Javascript
jquery下实现overlay遮罩层代码
2010/08/25 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
使用watch监听路由变化和watch监听对象的实例
2018/02/24 Javascript
解决vue+webpack打包路径的问题
2018/03/06 Javascript
vue实现element-ui对话框可拖拽功能
2018/08/17 Javascript
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
在Python中使用成员运算符的示例
2015/05/13 Python
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
Python实现确认字符串是否包含指定字符串的实例
2018/05/02 Python
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
python3 对list中每个元素进行处理的方法
2018/06/29 Python
在Pycharm中执行scrapy命令的方法
2019/01/16 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
什么是索引指示器
2012/08/20 面试题
怎样声明一个匿名的内部类
2016/06/01 面试题
业务员的岗位职责
2014/03/15 职场文书
国旗下演讲稿
2014/05/08 职场文书
2014年实习期工作总结
2014/11/27 职场文书
春季运动会开幕词
2015/01/28 职场文书
求职信范文怎么写
2015/03/19 职场文书
色戒观后感
2015/06/12 职场文书
nginx基于域名,端口,不同IP的虚拟主机设置的实现
2021/03/31 Servers
python 利用PyAutoGUI快速构建自动化操作脚本
2021/05/31 Python