详解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 相关文章推荐
Javascript 倒计时源代码.(时.分.秒) 详细注释版
May 09 Javascript
JavaScript调用客户端的可执行文件(示例代码)
Nov 28 Javascript
Javascript中setTimeOut和setInterval的定时器用法
Jun 12 Javascript
Jqgrid之强大的表格插件应用
Dec 02 Javascript
javascript运算符——位运算符全面介绍
Jul 14 Javascript
浅谈jQuery双事件多重加载的问题
Oct 05 Javascript
JS实现Ajax的方法分析
Dec 20 Javascript
vue渲染时闪烁{{}}的问题及解决方法
Mar 28 Javascript
vue组件name的作用小结
May 23 Javascript
vue-cli webpack 引入swiper的操作方法
Sep 15 Javascript
详解react组件通讯方式(多种)
May 06 Javascript
JavaScript 中判断变量是否为数字的示例代码
Oct 22 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
如何删除多级目录
2006/10/09 PHP
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
php中session与cookie的比较
2015/01/27 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
2008/11/24 Javascript
EasySlider 基于jQuery功能强大简单易用的滑动门插件
2010/06/11 Javascript
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
js展开闭合效果演示代码
2013/07/24 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
JavaScript基础知识学习笔记
2014/12/02 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
基于JavaScript实现随机颜色输入框
2016/12/10 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
javascript实现Emrips反质数枚举的示例代码
2017/12/06 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
浅谈Python中copy()方法的使用
2015/05/21 Python
Python实现统计代码行的方法分析
2017/07/12 Python
django实现web接口 python3模拟Post请求方式
2019/11/19 Python
如何利用python web框架做文件流下载的实现示例
2020/06/02 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
Python过滤序列元素的方法
2020/07/31 Python
python 线程的五个状态
2020/09/22 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
Lulu & Georgia官方网站:购买地毯、家具、抱枕、壁纸、床上用品等
2018/03/19 全球购物
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
酒店服务与管理毕业生求职信
2013/11/02 职场文书
致跳高运动员广播稿
2014/01/13 职场文书
电大毕业生自我鉴定
2014/04/10 职场文书
个人先进事迹材料
2014/12/29 职场文书
高中生物教学反思
2016/02/20 职场文书