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 相关文章推荐
CLASS_CONFUSION JS混淆 全源码
Dec 12 Javascript
jquery常用函数与方法汇总
Sep 01 Javascript
javascript中不易分清的slice,splice和split三个函数
Mar 29 Javascript
Bootstrap文件上传组件之bootstrap fileinput
Nov 25 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
Feb 10 Javascript
vue-router 路由基础的详解
Oct 17 Javascript
JavaScript实现简单动态进度条效果
Apr 06 Javascript
Vue动态获取width的方法
Aug 22 Javascript
详解Nuxt.js 实战集锦
Nov 19 Javascript
vue 点击其他区域关闭自定义div操作
Jul 17 Javascript
简介JavaScript错误处理机制
Aug 04 Javascript
js实现点击选项置顶动画效果
Aug 25 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
9个经典的PHP代码片段分享
2014/12/18 PHP
PHP将session信息存储到数据库的类实例
2015/03/04 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
jquery ajax属性async(同步异步)示例
2013/11/05 Javascript
jquery中get,post和ajax方法的使用小结
2014/02/04 Javascript
js实现div闪烁原理及实现代码
2014/06/24 Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
2015/10/08 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
2016/09/23 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
jquery表单验证插件validation使用方法详解
2017/01/20 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
2019/06/10 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
Python实现简单多线程任务队列
2016/02/27 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
2019/10/12 Python
Python中常见的数制转换有哪些
2020/05/27 Python
Django Path转换器自定义及正则代码实例
2020/05/29 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
python制作微博图片爬取工具
2021/01/16 Python
html5文本内容_动力节点Java学院整理
2017/07/11 HTML / CSS
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
北京银河万佳Java面试题
2012/03/21 面试题
学校安全教育月活动总结
2014/07/07 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
优秀工作者事迹材料
2014/12/26 职场文书