详解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 相关文章推荐
MultiSelect左右选择控件的设计与实现介绍
Jun 08 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
Feb 12 Javascript
JavaScript简介
Feb 15 Javascript
jQuery插件支持同一页面被多次调用
Feb 14 Javascript
Node.js开发者必须了解的4个JS要点
Feb 21 Javascript
PHP捕捉异常中断的方法
Oct 24 Javascript
javascript中的try catch异常捕获机制用法分析
Dec 14 Javascript
Vue 创建组件的两种方法小结(必看)
Feb 23 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
Sep 13 Javascript
jQuery实现可编辑的表格
Dec 11 jQuery
整理 node-sass 安装失败的原因及解决办法(小结)
Feb 19 Javascript
JavaScript图像放大镜效果实现方法详解
Jun 28 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实现过滤表单提交中html标签的方法
2014/10/17 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
2016/09/22 PHP
php的socket编程详解
2016/11/20 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
2018/09/16 PHP
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
2015/01/05 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
2015/10/09 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
JS构造函数与原型prototype的区别介绍
2016/07/04 Javascript
jQuery 3.0十大新特性最终版发布
2016/07/14 Javascript
JS 设置Cookie 有效期 检测cookie
2017/06/15 Javascript
angular实现input输入监听的示例
2018/08/31 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
js实现简单的日历显示效果函数示例
2019/11/25 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
Python多线程学习资料
2012/12/19 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
Python读取指定日期邮件的实例
2019/02/01 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
Django Rest framework频率原理与限制
2019/07/26 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
利用Python计算KS的实例详解
2020/03/03 Python
Python爬虫教程知识点总结
2020/10/19 Python
python re的findall和finditer的区别详解
2020/11/15 Python
《盲人摸象》教学反思
2014/02/16 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
2014年社区卫生工作总结
2014/12/18 职场文书
亮剑精神观后感
2015/06/05 职场文书
公务员的复习计划书,请收下!
2019/07/15 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书
Python实现机器学习算法的分类
2021/06/03 Python
React列表栏及购物车组件使用详解
2021/06/28 Javascript