详解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 相关文章推荐
List the Codec Files on a Computer
Jun 18 Javascript
无刷新预览所选择的图片示例代码
Apr 02 Javascript
JS动态增加删除UL节点LI及相关内容示例
May 21 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
Mar 25 Javascript
JS实现类似51job上的地区选择效果示例
Nov 17 Javascript
BootStrap 图标icon符号图标glyphicons不正常显示的快速解决办法
Dec 08 Javascript
js 用于检测类数组对象的函数方法
May 02 Javascript
浅谈angularJS的$watch失效问题的解决方案
Aug 11 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
Nov 29 Javascript
JS实现的自定义map方法示例
May 17 Javascript
修改NPM全局模式的默认安装路径的方法
Dec 15 Javascript
JavaScript的function函数详细介绍
Nov 20 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
一个简单的域名注册情况查询程序
2006/10/09 PHP
MySql中正则表达式的使用方法描述
2008/07/30 PHP
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
批量去除PHP文件中bom的PHP代码
2012/03/13 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
php中static 静态变量和普通变量的区别
2016/12/01 PHP
JQuery与iframe交互实现代码
2009/12/24 Javascript
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
2011/03/30 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
JavaScript节点及列表操作实例小结
2015/08/05 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
前端编码规范(3)JavaScript 开发规范
2017/01/21 Javascript
JavaScript评论点赞功能的实现方法
2017/03/13 Javascript
Vue中 key keep-alive的实现原理
2018/09/18 Javascript
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
Python设计模式之观察者模式实例
2014/04/26 Python
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
浅析Git版本控制器使用
2017/12/10 Python
解决python selenium3启动不了firefox的问题
2018/10/13 Python
CentOS 7下安装Python3.6 及遇到的问题小结
2018/11/08 Python
提升Python程序性能的7个习惯
2019/04/14 Python
python中时间模块的基本使用教程
2019/05/14 Python
python分布式计算dispy的使用详解
2019/12/22 Python
Python如何定义接口和抽象类
2020/07/28 Python
Python通过format函数格式化显示值
2020/10/17 Python
html5 canvas 简单画板实现代码
2012/01/05 HTML / CSS
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
服装设计师求职信
2014/06/04 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
2015年社区计生工作总结
2015/04/21 职场文书
pytorch查看网络参数显存占用量等操作
2021/05/12 Python