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的闭包的一个示例说明
Nov 18 Javascript
jQuery Div中加载其他页面的实现代码
Feb 27 Javascript
有趣的javascript数组定义方法
Sep 10 Javascript
javascript string字符串优化问题
Jul 31 Javascript
javascript与jquery中跳出循环的区别总结
Nov 04 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
Dec 14 Javascript
深入理解javascript变量声明
Nov 20 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
Feb 19 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
Feb 08 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
May 09 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
Nov 08 Javascript
vue页面更新patch的实现示例
Mar 25 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
基于Snoopy的PHP近似完美获取网站编码的代码
2011/10/23 PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
2013/04/26 PHP
深入PHP magic quotes的详解
2013/06/17 PHP
如何解决PHP无法实现多线程的问题
2015/09/25 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
2007/07/11 Javascript
JS 密码强度验证(兼容IE,火狐,谷歌)
2010/03/15 Javascript
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
整理Javascript基础语法学习笔记
2015/11/29 Javascript
前端框架Vue.js中Directive知识详解
2016/09/12 Javascript
node.js中debug模块的简单介绍与使用
2017/04/25 Javascript
小程序日历控件使用方法详解
2018/12/29 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
python 正则式 概述及常用字符
2009/05/07 Python
python实现360皮肤按钮控件示例
2014/02/21 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
基于多进程中APScheduler重复运行的解决方法
2019/07/22 Python
实现ECharts双Y轴左右刻度线一致的例子
2020/05/16 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
python实现无边框进度条的实例代码
2020/12/30 Python
美国波西米亚风格服装品牌:Show Me Your Mumu
2018/01/05 全球购物
几个Shell Script面试题
2012/08/31 面试题
党员一句话承诺大全
2014/03/28 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
公司出纳岗位职责
2015/03/31 职场文书
2015社区六五普法工作总结
2015/04/21 职场文书
React forwardRef的使用方法及注意点
2021/06/13 Javascript
搭建Yolov5服务器
2022/04/30 Servers