详解Vue中watch对象内属性的方法


Posted in Javascript onFebruary 01, 2019

vue提供了watch方法,用于监听实例内data数据的变化。通常写法是:

new Vue({
 data: {
  count: 10,
  blog:{
    title:'my-blog',
    categories:[]
  }
 },
 watch: {
  count: function (newval, oldVal) {
   console.log(`new: %s, old: %s`, newVal, oldVal);
  }
 }
})

上述情况里data中的count属性可以直接监听,但是如果需要监听的数据是对象内的某一属性值的变化,直接watch对象blog是检测不到变化的,这是因为blog这个对象的指向并没有发生改变。有几个解决方法

1.深度监测

new Vue({
 data: {
  count: 10,
  blog:{
    title:'my-blog',
    categories:[]
  }
 },
 watch: {
  blog:{
    handler(newVal,oldVal){
      console.log(`new: ${newVal}, old: ${oldVal}`);
    },
    deep:true
  }
 }
})

里面的deep设为了true,这样的话,如果修改了这个blog中的任何一个属性,都会执行handler这个方法。不过这样会造成更多的性能开销,尤其是对象里面属性过多,结构嵌套过深的时候。而且有时候我们就只想关心这个对象中的某个特定属性,这个时候可以这样

2.用字符串来表示对象的属性调用

new Vue({
 data: {
  count: 10,
  blog:{
    title:'my-blog',
    categories:[]
  }
 },
 watch: {
  'blog.categories'(newVal, oldVal) {
    console.log(`new:${newVal}, old:${oldVal}`);
  }, 
 }
})

3.使用computed计算属性

new Vue({
 data: {
  count: 10,
  blog:{
    title:'my-blog',
    categories:[]
  }
 },
 computed: {
  categories() {
   return this.blog.categories;
  }
 },
 watch: {
  categories(newVal, oldVal) {
   console.log(`new:${newVal}, old:${oldVal}`);
  }, 
 },
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
srcElement表格样式
Sep 03 Javascript
很多人都是用下面的js刷新站IP和PV
Sep 05 Javascript
jquery 仿QQ校友的DIV模拟窗口效果源码
Mar 24 Javascript
基于Jquery的开发个代阴影的对话框效果代码
Jul 28 Javascript
JQuery 操作/获取table具体代码
Jun 13 Javascript
js获取html文件的思路及示例
Sep 17 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
Jun 09 Javascript
详解JavaScript表单验证(E-mail 验证)
Mar 31 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
May 20 Javascript
基于Bootstrap分页的实例讲解(必看篇)
Jul 04 Javascript
快速了解vue-cli 3.0 新特性
Feb 28 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
Feb 25 Javascript
JS字典Dictionary类定义与用法示例
Feb 01 #Javascript
在 Vue.js中优雅地使用全局事件的方法
Feb 01 #Javascript
微信小程序实现的动态设置导航栏标题功能示例
Jan 31 #Javascript
JS双向链表实现与使用方法示例(增加一个previous属性实现)
Jan 31 #Javascript
JS基于对象的链表实现与使用方法示例
Jan 31 #Javascript
JS栈stack类的实现与使用方法示例
Jan 31 #Javascript
JQuery中queue方法用法示例
Jan 31 #jQuery
You might like
基于php设计模式中单例模式的应用分析
2013/05/15 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
PHP获取数组最大值下标的方法
2015/05/12 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
php源码的使用方法讲解
2019/09/26 PHP
JavaScript 对象、函数和继承
2009/07/07 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
2015/10/22 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
Winform客户端向web地址传参接收参数的方法
2016/05/17 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
微信小程序  生命周期详解
2016/10/27 Javascript
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
JS中type="button"和type="submit"的区别
2017/07/04 Javascript
JS正则表达式完美实现身份证校验功能
2017/10/18 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
使用validate.js实现表单数据提交前的验证方法
2018/09/04 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
Javascript生成器(Generator)的介绍与使用
2021/01/31 Javascript
详解Django缓存处理中Vary头部的使用
2015/07/24 Python
python中正则表达式的使用方法
2018/02/25 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
python多进程重复加载的解决方式
2019/12/13 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
2020/01/20 Python
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
祖国在我心中的演讲稿
2014/05/04 职场文书
2015年服务员个人工作总结
2015/05/27 职场文书
大学迎新生欢迎词
2015/09/29 职场文书
Nginx内网单机反向代理的实现
2021/11/07 Servers
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android
js 实现验证码输入框示例详解
2022/09/23 Javascript