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截取指定长度字符串的实现原理及代码
Jul 01 Javascript
JavaScript定义变量和变量优先级问题探讨
Oct 11 Javascript
Jquery ajax基础教程
Nov 20 Javascript
jQuery+ajax简单实现文件上传的方法
Jun 03 Javascript
详解如何构建Angular项目目录结构
Jul 13 Javascript
基于Jquery Ajax type的4种类型(详解)
Aug 02 jQuery
webpack进阶——缓存与独立打包的用法
Aug 02 Javascript
angularjs实现简单的购物车功能
Sep 21 Javascript
Vue 开发音乐播放器之歌手页右侧快速入口功能
Aug 08 Javascript
swiper Scrollbar滚动条组件详解
Sep 08 Javascript
JS实现关闭小广告特效
Jan 29 Javascript
Node.js中的异步生成器与异步迭代详解
Jan 31 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程序设计中的MVC编程思想
2014/07/28 PHP
Yii2.0预定义的别名功能小结
2016/07/04 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
wap浏览自动跳转到wap页面的js代码
2014/05/17 Javascript
JS实现5秒钟自动封锁div层的方法
2015/02/20 Javascript
JS替换字符串中空格方法
2015/04/17 Javascript
基于JS实现导航条flash导航条
2016/06/17 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
使用Vuex解决Vue中的身份验证问题
2018/09/28 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
vue页面引入three.js实现3d动画场景操作
2020/08/10 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
浅析Python中的赋值和深浅拷贝
2017/08/15 Python
浅谈Python处理PDF的方法
2017/11/10 Python
Python 实现Windows开机运行某软件的方法
2018/10/14 Python
python 将list转成字符串,中间用符号分隔的方法
2018/10/23 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
2018/12/27 Python
Python docx库用法示例分析
2019/02/16 Python
python实现字符串和数字拼接
2020/03/02 Python
python3 deque 双向队列创建与使用方法分析
2020/03/24 Python
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
家长给幼儿园的表扬信
2014/01/09 职场文书
会计稽核岗位职责
2015/04/13 职场文书
2015年效能监察工作总结
2015/04/23 职场文书
在校生证明
2015/06/17 职场文书
Python深度学习之实现卷积神经网络
2021/06/05 Python
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python
Python使用pandas导入xlsx格式的excel文件内容操作代码
2022/12/24 Python