vue改变对象或数组时的刷新机制的方法总结


Posted in Javascript onApril 24, 2019

Vue数据响应原理

官方的解释很清晰:

当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用 Object.defineProperty 把这些属性全部转为 getter/setter。Object.defineProperty 是ES5 中一个无法 shim 的特性,这也就是为什么 Vue 不支持 IE8 以及更低版本浏览器的原因。 用户看不到 getter/setter,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。这里需要注意的问题是浏览器控制台在打印数据对象时 getter/setter 的格式化并不同,所以你可能需要安装 vue-devtools 来获取更加友好的检查接口。 每个组件实例都有相应的 watcher 实例对象,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的 setter 被调用时,会通知 watcher 重新计算,从而致使它关联的组件得以更新。 

总结:

1.数组更改值或者增加删除值,不会触发更新。
2.对象更改值可触发更新,增加或者删除属性不会触发更新。
3.对象数组:数组中的对象更改值会触发更新。

一、纯数组-------showArr:[true,true]

数组中元素直接赋值,---不触发刷新

this.showArr[0]=!this.showArr[0];

数组修改后整体赋值,---不触发刷新

var parr=this.showArr;
parr[0]=!parr[0];
this.showArr=parr;

数组重新复制出一份新的,修改后整体赋值,---可触发刷新

var parr=this.showArr.slice(0);
parr[0]=!parr[0];
this.showArr=parr;

用$set赋值,---可触发刷新

this.$set(this.showArr,0,!this.showArr[0])

二、纯对象-------showArr:{'showBool':true}

对象中元素直接赋值,---可触发刷新

this.showArr['showBool']=!this.showArr['showBool'];

对象修改后整体赋值,---可触发刷新

var parr=this.showArr;
parr['showBool']=!parr['showBool'];
this.showArr=parr;

用$set赋值,---可触发刷新

this.$set(this.showArr,'showBool',!this.showArr['showBool']);

三、 对象数组-------showArr:[{'showBool':true},{'showBool':true}]

数组中元素直接赋值,---可触发刷新

this.showArr[0]['showBool']=!this.showArr[0]['showBool'];

数组修改后整体赋值,---可触发刷新

var parr=this.showArr;
parr[0]['showBool']=!parr[0]['showBool'];
this.showArr=parr;

数组重新复制出一份新的,修改后整体赋值,---可触发刷新

var parr=this.showArr.slice(0);
parr[0]['showBool']=!parr[0]['showBool'];
this.showArr=parr;

用$set赋值,---可触发刷新

this.$set(this.showArr[0],'showBool',!this.showArr[0]['showBool']);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
extjs 为某个事件设置拦截器
Jan 15 Javascript
从jquery的过滤器.filter()方法想到的
Sep 29 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
May 07 Javascript
从零学jquery之如何使用回调函数
May 16 Javascript
超炫的jquery仿flash导航栏特效
Nov 11 Javascript
个人网站留言页面(前端jQuery编写、后台php读写MySQL)
May 03 Javascript
微信小程序 弹幕功能简单实例
Feb 14 Javascript
分享vue.js devtools遇到一系列问题
Oct 24 Javascript
详解webpack中的hash、chunkhash、contenthash区别
Jan 05 Javascript
js实现继承的方法及优缺点总结
May 08 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
Oct 30 Javascript
JS函数式编程实现XDM一
Jun 16 Javascript
详解Vue源码中一些util函数
Apr 24 #Javascript
vue-cli3 DllPlugin 提取公用库的方法
Apr 24 #Javascript
VUE 实现复制内容到剪贴板的两种方法
Apr 24 #Javascript
详解一个小实例理解js原型和继承
Apr 24 #Javascript
微信小程序实现的一键复制功能示例
Apr 24 #Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
Apr 24 #Javascript
解决vue 单文件组件中样式加载问题
Apr 24 #Javascript
You might like
php学习 函数 课件
2008/06/15 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
PHP实现Session入库/存入redis的方法
2017/05/04 PHP
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
浅谈redux以及react-redux简单实现
2018/08/28 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
vue router导航守卫(router.beforeEach())的使用详解
2019/04/19 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
python实现复制整个目录的方法
2015/05/12 Python
python实现推箱子游戏
2020/03/25 Python
详解Python基础random模块随机数的生成
2019/03/23 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
python opencv 图像拼接的实现方法
2019/06/27 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
IWOOT美国:新奇的小玩意
2018/04/27 全球购物
女性时尚在线:IVRose
2019/02/23 全球购物
澳大利亚巧克力花束和礼品网站:Tastebuds
2019/03/15 全球购物
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
介绍一下Java的安全机制
2012/06/28 面试题
优秀毕业生推荐信
2013/11/02 职场文书
广告设计专业自荐信范文
2013/11/14 职场文书
表彰会主持词
2014/03/26 职场文书
社团活动总结范文
2014/04/26 职场文书
部门2014年度工作总结
2014/11/12 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL