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 相关文章推荐
JS刷新当前页面的几种方法总结
Dec 24 Javascript
JavaScript判断文件上传类型的方法
Sep 02 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
Nov 18 Javascript
Angular下H5上传图片的方法(可多张上传)
Jan 09 Javascript
利用NPM淘宝的node.js镜像加速nvm
Mar 27 Javascript
jQuery条件分页 代替离线查询(附代码)
Aug 17 jQuery
基于React+Redux的SSR实现方法
Jul 03 Javascript
angular6的table组件开发的实现示例
Dec 26 Javascript
layui点击弹框页面 表单请求的方法
Sep 21 Javascript
Javascript var变量删除原理及实现
Aug 26 Javascript
vue-simple-uploader上传成功之后的response获取代码
Sep 07 Javascript
jquery实现广告上下滚动效果
Mar 04 jQuery
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基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
自适应高度框架 ----属个人收藏内容
2007/01/22 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
修改jquery中dialog的title属性方法(推荐)
2016/08/26 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
Python使用MD5加密字符串示例
2014/08/22 Python
Python3访问并下载网页内容的方法
2015/07/28 Python
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
python队列queue模块详解
2018/04/27 Python
Sanic框架流式传输操作示例
2018/07/18 Python
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
使用AJAX和Django获取数据的方法实例
2020/10/25 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
HTML5进度条特效
2014/12/18 HTML / CSS
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
学术会议欢迎词
2014/01/09 职场文书
小学生红领巾广播稿
2014/01/21 职场文书
网吧消防安全制度
2014/01/28 职场文书
美德好少年主要事迹
2014/01/29 职场文书
亮化工程实施方案
2014/03/17 职场文书
音乐节策划方案
2014/06/09 职场文书
庐山导游词
2015/02/03 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
导游词之海南天涯海角
2019/12/05 职场文书
python 逐步回归算法
2021/04/06 Python
nginx 添加http_stub_status_module模块
2022/05/25 Servers