解决Vue2.0 watch对象属性变化监听不到的问题


Posted in Javascript onSeptember 11, 2018

问题

很早之前就遇到一个问题,父组件向子组件传值,子组件监听传入对象的某个属性。发现子组件使用deep watch都不能观察到对象中属性的变化,今天终于找到为啥出现这种问题和解决办法了。

解决

为啥出现这种问题?受 ES5 的限制,Vue.js 不能检测到对象属性的添加或删除。

请参照https://v1-cn.vuejs.org/guide/reactivity.html

解决方式:

通过vue的this.$set(object, key, value)方法

通过Object.assign()重新创建一个对象, 例如this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })

代码实例

<template>
 <div>
 <p @click="fun1" style="color: blue">方式一</p>
 <p @click="fun2" style="color: blue">方式二</p>
 </div>
</template>

<script>
export default {
 data () {
 return {
  p: {a: 1}
 }
 },
 methods: {
 fun1 () {
  console.log('click 1111')
  // this.p.b = 2 // 通过点方法赋值,发现观察不到p的变化
  this.$set(this.p, 'b', 2) // 第一种解决方式,可以查看日志看到已经监听到了变化
 },
 fun2 () {
  console.log('click 2222')
  this.p = Object.assign({}, this.p, {c: 3})
 }
 },
 watch: {
 p: {
  handler (cval, oval) {
  console.log('--------')
  console.log(cval, oval)
  },
  deep: true
 }
 }
}
</script>

<style>

</style>

总结

个人推荐使用第二种解决方式,代码写起来更优雅。第一种解决方式如果有多个值会出现,多行$set()语句。

以上这篇解决Vue2.0 watch对象属性变化监听不到的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery实现预览提交的表单代码分享
May 21 Javascript
JavaScript 开发工具webstrom使用指南
Dec 09 Javascript
js/jquery判断浏览器类型的方法小结
May 12 Javascript
浏览器兼容性问题大汇总
Dec 17 Javascript
jquery获取复选框的值的简单实例
May 26 Javascript
JS简单随机数生成方法
Sep 05 Javascript
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
Oct 10 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
Jul 05 Javascript
js实现本地时间同步功能
Aug 26 Javascript
开源一个微信小程序仪表盘组件过程解析
Jul 30 Javascript
关于AngularJS中几种Providers的区别总结
May 17 Javascript
javascript前端实现多视频上传
Dec 13 Javascript
详解webpack模块加载器兼打包工具
Sep 11 #Javascript
webpack css加载和图片加载的方法示例
Sep 11 #Javascript
vue1.0和vue2.0的watch监听事件写法详解
Sep 11 #Javascript
webpack的CSS加载器的使用
Sep 11 #Javascript
JavaScript基础教程之如何实现一个简单的promise
Sep 11 #Javascript
Vue监听数据渲染DOM完以后执行某个函数详解
Sep 11 #Javascript
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
Sep 11 #Javascript
You might like
微信公众平台开发之天气预报功能
2015/08/31 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
2017/07/19 PHP
firebug的一个有趣现象介绍
2011/11/30 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
JQuery实现防止退格键返回的方法
2015/02/12 Javascript
代码分析jQuery四种静态方法使用
2015/07/23 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
javascript 中的try catch应用总结
2017/04/01 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
angularJS开发注意事项
2018/05/26 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
vue表单中遍历表单操作按钮的显示隐藏示例
2019/10/30 Javascript
vue使用video插件vue-video-player详解
2020/10/23 Javascript
[54:26]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第一场 12.10
2020/12/12 DOTA
Python中的浮点数原理与运算分析
2017/10/12 Python
Python3实现的画图及加载图片动画效果示例
2018/01/19 Python
Python unittest单元测试框架总结
2018/09/08 Python
Python绘制二维曲线的日常应用详解
2019/12/04 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
2020/08/17 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
运动会解说词50字
2014/01/18 职场文书
师德师风个人反思
2014/04/28 职场文书
党员干部一句话承诺
2014/05/30 职场文书
公司证明怎么写
2014/09/22 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
敬业奉献模范事迹材料
2014/12/24 职场文书
2015年大班保育员工作总结
2015/05/18 职场文书
阿甘正传观后感
2015/06/01 职场文书
小学副班长竞选稿
2015/11/21 职场文书
只用50行Python代码爬取网络美女高清图片
2021/06/02 Python
DSP接收机前端设想
2022/04/05 无线电