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中的window.event.keyCode使用介绍
Apr 26 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
Apr 20 Javascript
jQuery创建DOM元素实例解析
Jan 19 Javascript
javascript验证身份证号
Mar 03 Javascript
完美兼容多浏览器的js判断图片路径代码汇总
Apr 17 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
Jan 22 Javascript
WebStorm ES6 语法支持设置&amp;babel使用及自动编译(详解)
Sep 08 Javascript
node.js中http模块和url模块的简单介绍
Oct 06 Javascript
ES6学习教程之对象字面量详解
Oct 09 Javascript
vue中axios的封装问题(简易版拦截,get,post)
Jun 15 Javascript
AngularJS实现动态切换样式的方法分析
Jun 26 Javascript
微信小程序 调用微信授权窗口相关问题解决
Jul 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
PHPMailer邮件发送的实现代码
2013/05/04 PHP
php中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
PHP扩展开发入门教程
2015/02/26 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
jquery新的绑定事件机制on方法的使用方法
2014/04/15 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
关于js原型的面试题讲解
2016/09/25 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
angularjs中ng-bind-html的用法总结
2017/05/23 Javascript
在vue项目中引用Iview的方法
2018/09/14 Javascript
微信小程序实现左滑修改、删除功能
2020/10/19 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
python 中文乱码问题深入分析
2011/03/13 Python
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
Python 线性回归分析以及评价指标详解
2020/04/02 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
python中pickle模块浅析
2020/12/29 Python
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
一份婚庆公司创业计划书
2014/01/11 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
银行委托书范本
2014/09/28 职场文书
营业用房租赁协议书
2014/11/26 职场文书
干货分享:推荐信写作技巧!
2019/06/21 职场文书
如何撰写创业策划书
2019/06/27 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
利用JavaScript写一个简单计算器
2021/11/27 Javascript