Vue响应式添加、修改数组和对象的值


Posted in Javascript onMarch 20, 2017

有些时候,不得不想添加、修改数组和对象的值,但是直接添加、修改后又失去了getter、setter。

由于 JavaScript 的限制, Vue 不能检测以下变动的数组:

1. 利用索引直接设置一个项时,例如: vm.items[indexOfItem] = newValue

2. 修改数组的长度时,例如: vm.items.length = newLength

为了避免第一种情况,以下两种方式将达到像 vm.items[indexOfItem] = newValue 的效果, 同时也将触发状态更新:

// Vue.set
Vue.set(example1.items, indexOfItem, newValue)
// Array.prototype.splice`
example1.items.splice(indexOfItem, 1, newValue)

避免第二种情况,使用 splice:

example1.items.splice(newLength)

 Vue 不允许在已经创建的实例上动态添加新的根级响应式属性(root-level reactive property)。然而它可以使用Vue.set(object, key, value) 方法将响应属性添加到嵌套的对象上:

Vue.set(vm.someObject, 'b', 2)

您还可以使用 vm.$set 实例方法,这也是全局 Vue.set 方法的别名:

this.$set(this.someObject,'b',2)

有时你想向已有对象上添加一些属性,例如使用 Object.assign() 或 _.extend() 方法来添加属性。但是,添加到对象上的新属性不会触发更新。在这种情况下可以创建一个新的对象,让它包含原对象的属性和新的属性:

// 代替 `Object.assign(this.someObject, { a: 1, b: 2 })`
this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })
this.someObject = _.extend({ a: 1, b: 2 }, this.someObject)

示例代码:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
 <meta charset="utf-8">
 <title></title>
</head>
<body>
 
 <div id="app">
 <ol>
 <li v-for="data in list">{{data.id}} - {{data.name}}</li>
 </ol>
 </div>


 <script type="text/javascript" src="../underscore/underscore-min.js"></script>
 <script type="text/javascript" src="./vue.2.1.8.min.js"></script>
 <script type="text/javascript">
 var oVue = new Vue({
 el : '#app',
 data : {
 list : [
  {id : 5},
  {id : 6}
 ]
 }
 });
 </script>
</body>
</html>

Vue响应式添加、修改数组和对象的值

以上就是VueI添加修改数组与对象值时同时将触发状态更新的方法,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
jquery操作select option 的代码小结
Jun 21 Javascript
JS实现鼠标点击展开或隐藏表格行的方法
Mar 03 Javascript
JavaScript基本的输出和嵌入式写法教程
Oct 20 Javascript
ionic js 模型 $ionicModal 可以遮住用户主界面的内容框
Jun 06 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
Jun 08 Javascript
javascript动画之磁性吸附效果篇
Dec 09 Javascript
Bootstrap 3 按钮标签实例代码
Feb 21 Javascript
js使用html2canvas实现屏幕截取的示例代码
Aug 28 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
Jan 23 jQuery
vue实现点击关注后及时更新列表功能
Jun 26 Javascript
JS实现分页导航效果
Feb 19 Javascript
JavaScript中10个Reduce常用场景技巧
Jun 21 Javascript
zTree实现节点修改的实时刷新功能
Mar 20 #Javascript
Vue指令的钩子函数使用方法
Mar 20 #Javascript
非常实用的vue导航钩子
Mar 20 #Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
Mar 20 #Javascript
如何解决vue与传统jquery插件冲突
Mar 20 #Javascript
Vue.js路由vue-router使用方法详解
Mar 20 #Javascript
Vue插件写、用详解(附demo)
Mar 20 #Javascript
You might like
Php部分常见问题总结
2006/10/09 PHP
php下封装较好的数字分页方法
2010/11/23 PHP
php利用cookies实现购物车的方法
2014/12/10 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
jQuery 源码分析笔记(4) Ready函数
2011/06/02 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
2013/01/22 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
轻松实现jquery选项卡切换效果
2016/10/10 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
JS+HTML5 canvas绘制验证码示例
2018/12/05 Javascript
vue无限轮播插件代码实例
2019/05/10 Javascript
深入了解js原型模式
2019/05/30 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
基于vue+echarts 数据可视化大屏展示的方法示例
2020/03/09 Javascript
Python装饰器使用实例:验证参数合法性
2015/06/24 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
Django如何配置mysql数据库
2018/05/04 Python
python创建文件时去掉非法字符的方法
2018/10/31 Python
selenium+Chrome滑动验证码破解二(某某网站)
2019/12/17 Python
如何更改 pandas dataframe 中两列的位置
2019/12/27 Python
Python实现ATM系统
2020/02/17 Python
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
巴西购物网站:Submarino
2020/01/19 全球购物
电气专业推荐信范文
2013/11/18 职场文书
求职信的七个关键技巧
2014/02/05 职场文书
西式结婚主持词
2014/03/14 职场文书
《鲁班和橹板》教学反思
2014/04/27 职场文书
冬季施工防火方案
2014/05/17 职场文书
入党宣誓大会后的感想
2015/08/10 职场文书
2016年优秀少先队员事迹材料
2016/02/26 职场文书