详解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 相关文章推荐
一个背景云变换js特效 鼠标移动背景云变化
Dec 28 Javascript
JS下拉框内容左右移动效果的具体实现
Jul 10 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
Jan 24 Javascript
javascript解析json实例详解
Nov 05 Javascript
jQuery简单操作cookie的插件实例
Jan 13 Javascript
Bootstrap Validator 表单验证
Jul 25 Javascript
Jquery Easyui菜单组件Menu使用详解(15)
Dec 18 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
Jan 19 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
Sep 14 Javascript
Vuex 使用 v-model 配合 state的方法
Nov 13 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
Sep 24 Javascript
JQuery复选框全选效果如何实现
May 08 jQuery
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
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
php中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
php实现水仙花数示例分享
2014/04/03 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
2016/09/21 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
js中的replace方法使用介绍
2013/10/28 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
JavaScript设计模式之工厂方法模式介绍
2014/12/28 Javascript
javascript中Array数组的迭代方法实例分析
2015/02/04 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
python 编码规范整理
2018/05/05 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
Python 中如何实现参数化测试的方法示例
2019/12/10 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
实例讲解CSS3中Transform的perspective属性的用法
2016/04/22 HTML / CSS
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
HTML5中使用json对象的实例代码
2018/09/10 HTML / CSS
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
沙特阿拉伯电子产品和家用电器购物网站:Black Box
2019/07/24 全球购物
如何利用cmp命令比较文件
2013/09/23 面试题
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
2012/11/09 面试题
即将毕业大学生自荐信
2014/01/24 职场文书
理财投资建议书
2014/03/12 职场文书
禁烟标语大全
2014/06/11 职场文书
人力资源管理求职信
2014/08/07 职场文书
协会周年庆活动方案
2014/08/26 职场文书
租赁协议书
2015/01/27 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS