详解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 相关文章推荐
jquery 多级下拉菜单核心代码
May 21 Javascript
JavaScript基础语法让人疑惑的地方小结
May 23 Javascript
使用js实现一个可编辑的select下拉列表
Feb 20 Javascript
推荐一个封装好的getElementsByClassName方法
Dec 02 Javascript
详解AngularJS中的表达式使用
Jun 16 Javascript
javascript控制层显示或隐藏的方法
Jul 22 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
Oct 26 Javascript
jquery 正整数数字校验正则表达式
Jan 10 Javascript
提高Node.js性能的应用技巧分享
Aug 10 Javascript
详解vue的diff算法原理
May 20 Javascript
Vue使用axios出现options请求方法
May 30 Javascript
.netcore+vue 实现压缩文件下载功能
Sep 24 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之十六个魔术方法详细介绍
2016/11/01 PHP
浅析php如何实现爬取数据原理
2018/09/27 PHP
PHP getNamespaces()函数讲解
2019/02/03 PHP
js 创建快捷方式的代码(fso)
2010/11/19 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
javascript实现点击提交按钮后显示loading的方法
2015/07/03 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
Bootstrap下拉菜单Dropdowns的实现代码
2017/03/17 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
vue学习笔记之slot插槽基本用法实例分析
2020/02/01 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
Javascript地址引用代码实例解析
2020/02/25 Javascript
vue.js实现双击放大预览功能
2020/06/23 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
numpy排序与集合运算用法示例
2017/12/15 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
2018/05/18 Python
Django后台admin的使用详解
2019/07/08 Python
django迁移数据库错误问题解决
2019/07/29 Python
巴西图书和电子产品购物网站:Saraiva
2017/06/07 全球购物
李宁官方网店:中国运动品牌
2017/11/02 全球购物
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
先进个人事迹材料
2014/01/25 职场文书
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
小学社会实践活动总结
2014/07/03 职场文书
委托书的写法
2014/08/30 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
2015年学校心理健康教育工作总结
2015/05/11 职场文书
研究生论文答辩开场白
2015/05/27 职场文书