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编程起步(第七课)
Feb 27 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
Sep 17 Javascript
GRID拖拽行的实例代码
Jul 18 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
Dec 13 Javascript
jQuery中not()方法用法实例
Jan 06 Javascript
js表单提交和submit提交的区别实例分析
Dec 10 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
Jan 28 Javascript
jquery attr()设置和获取属性值实例教程
Sep 25 Javascript
Vue.js Ajax动态参数与列表显示实现方法
Oct 20 Javascript
Javascript之面向对象--封装
Dec 02 Javascript
修改node.js默认的npm安装目录实例
May 15 Javascript
深入理解Vue 组件之间传值
Aug 16 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两种快速排序算法实例
2015/02/15 PHP
分享PHP守护进程类
2015/12/30 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
PHP实现时间日期友好显示实现代码
2019/09/08 PHP
javascript一些实用技巧小结
2011/03/18 Javascript
js常用代码段收集
2011/10/28 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
2013/04/09 Javascript
JS控制日期显示的小例子
2013/11/23 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
2015/03/31 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
Angular工具方法学习
2016/12/26 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
express+mockjs实现模拟后台数据发送功能
2018/01/07 Javascript
看看“疫苗查询”小程序有温度的代码
2018/07/31 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
python树莓派红外反射传感器
2019/01/21 Python
Python元组常见操作示例
2019/02/19 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
政风行风整改报告
2014/11/06 职场文书
高三英语教学计划
2015/01/23 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
志愿者服务活动总结报告
2015/05/06 职场文书
酒店员工管理制度
2015/08/05 职场文书
《桂花雨》教学反思
2016/02/19 职场文书
话题作文之成长
2019/12/09 职场文书
golang 如何用反射reflect操作结构体
2021/04/28 Golang