Vue.set() this.$set()引发的视图更新思考及注意事项


Posted in Javascript onAugust 30, 2018

引文

vue文档列表渲染中有条注意事项:

Vue.set() this.$set()引发的视图更新思考及注意事项

这里提到的两种情况实际改变了数据但是没有触发视图更新。

由此引出Vue.set(),先上文档API:

 

this.$set()Vue.set()本质方法一样,前者可以用在methods中使用。

set方法调用时,可以触发页面全部重新渲染。

比如在vue中有个data数组arr:

//arr=[1,2,3]
  arr[1]='b'
  console.log(arr) // [1,2,3]
  Vue.set(arr,2,'c')
  console.log(arr) // [1,b,c]

可以看出set触发了整个页面的重新渲染,连arr[1]='b'的效果也被重新渲染了。

使用set添加数据

Vue.set()不光能修改数据,还能添加数据,弥补了Vue数组变异方法的不足。

可以使用set添加数据这一特性,解决一些常见问题。

例如循环出的元素点击应用选中样式,再点击取消选中样式。

<section v-for="item in list">
  <div :class="['xxclass',item.checked?'checked':'']"></div>
</section>
<!--这里通过判断item的**本身不存在的checked属性**来决定是否增加checked样式类-->

点击方法如下:

clickHandle: function(item){
  if(typeof item.checked === 'undefined'){
   this.$set(item, 'checked', true)
  } else {
   item.checked = !item.checked
  }
}
// 如果item没有checked属性就用set方法添加,有则取反

这就利用set使用了对象中本身不存在的checked属性来实现想要的功能。

深入响应式原理

至于视图更新时机可以看文档深入响应式原理

总结

以上所述是小编给大家介绍的Vue.set() this.$set()引发的视图更新思考及注意事项,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
改善用户体验的五款jQuery插件分享
May 22 Javascript
jQuery 中使用JSON的实现代码
Dec 01 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
May 28 Javascript
JavaScript中把数字转换为字符串的程序代码
Jun 19 Javascript
jquery操作select方法汇总
Feb 05 Javascript
IE6兼容透明背景图片及解决方案
Aug 19 Javascript
AngularJS实现Model缓存的方式
Feb 03 Javascript
Bootstrap3 datetimepicker控件使用实例
Dec 13 Javascript
Angularjs单选改为多选的开发过程及问题解析
Feb 17 Javascript
angular 未登录状态拦截路由跳转的方法
Oct 09 Javascript
vue-resource:jsonp请求百度搜索的接口示例
Nov 09 Javascript
vue fetch中的.then()的正确使用方法
Apr 17 Javascript
基于Angularjs-router动态改变Title值的问题
Aug 30 #Javascript
从vue源码解析Vue.set()和this.$set()
Aug 30 #Javascript
vue-router动态设置页面title的实例讲解
Aug 30 #Javascript
解决vue select当前value没有更新到vue对象属性的问题
Aug 30 #Javascript
微信小程序使用wxParse解析html的实现示例
Aug 30 #Javascript
vue中rem的配置的方法示例
Aug 30 #Javascript
Vue2实时监听表单变化的示例讲解
Aug 30 #Javascript
You might like
在线增减.htpasswd内的用户
2006/10/09 PHP
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
php查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
jQuery实现的在线答题功能
2015/04/12 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
详解微信小程序的不同函数调用的几种方法
2019/05/08 Javascript
vue.js 2.0实现简单分页效果
2019/07/29 Javascript
vue计算属性无法监听到数组内部变化的解决方案
2019/11/06 Javascript
vue-router 路由传参用法实例分析
2020/03/06 Javascript
解决vue路由name同名,路由重复的问题
2020/08/05 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
Python学习笔记之解析json的方法分析
2017/04/21 Python
Python使用剪切板的方法
2017/06/06 Python
利用Python如何生成便签图片详解
2018/07/09 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
Python如何定义接口和抽象类
2020/07/28 Python
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
美国在线自行车商店:Jenson USA
2018/05/22 全球购物
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
港澳通行证委托书怎么写
2014/08/02 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
2015年入党决心书
2015/02/05 职场文书
2015幼儿园新学期寄语
2015/02/27 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
如何使用vue3打造一个物料库
2021/05/08 Vue.js
详解CSS3浏览器兼容
2022/12/24 HTML / CSS