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 相关文章推荐
JavaScript高级程序设计 读书笔记之九 本地对象Array
Feb 27 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
Mar 01 Javascript
用jquery实现点击栏目背景色改变
Dec 10 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
Apr 22 Javascript
JavaScript语言精粹经典实例(整理篇)
Jun 07 Javascript
老生常谈javascript的类型转换
Oct 12 Javascript
JS基于正则表达式的替换操作(replace)用法示例
Apr 28 Javascript
JavaScript实现单例模式实例分享
Dec 22 Javascript
vue.js根据代码运行环境选择baseurl的方法
Feb 28 Javascript
vue数据操作之点击事件实现num加减功能示例
Jan 19 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
Oct 27 Javascript
js回到页面指定位置的三种方式
Dec 17 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
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
PHP simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
下拉列表多级联动dropDownList示例代码
2013/06/27 PHP
PHP实现合并discuz用户
2015/08/05 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
2011/04/07 Javascript
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
jQuery实现页面滚动时动态加载内容的方法
2015/03/20 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
2016/08/24 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
JavaScript无操作后屏保功能的实现方法
2017/07/04 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
js+canvas实现滑动拼图验证码功能
2018/03/26 Javascript
移动端吸顶fixbar的解决方案详解
2019/07/17 Javascript
用Golang运行JavaScript的实现示例
2019/11/25 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
2019/12/16 Javascript
python 容器总结整理
2017/04/04 Python
Python实现通讯录功能
2018/02/22 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
windows下 兼容Python2和Python3的解决方法
2018/12/05 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
python Canny边缘检测算法的实现
2020/04/24 Python
strlen的几种不同实现方法
2013/05/31 面试题
什么是TCP/IP
2014/07/27 面试题
保护黄河倡议书
2014/05/16 职场文书
监察建议书格式
2014/05/19 职场文书
基层党组织建设整改方案
2014/09/16 职场文书
财务总监岗位职责
2015/02/03 职场文书
导游词之西安骊山
2019/12/03 职场文书
Python词云的正确实现方法实例
2021/05/08 Python
jQuery ajax - getScript() 方法和getJSON方法
2021/05/14 jQuery
MySQL的安装与配置详细教程
2021/06/26 MySQL
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫