VUE 实现动态给对象增加属性,并触发视图更新操作示例


Posted in Javascript onNovember 29, 2019

本文实例讲述了VUE 实现动态给对象增加属性,并触发视图更新操作。分享给大家供大家参考,具体如下:

在开发过程中,我们时常会遇到这样一种情况:当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的。

根据官方文档定义:如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。

Vue 不允许在已经创建的实例上动态添加新的根级响应式属性 (root-level reactive property)。然而它可以使用 Vue.set(object, key, value) 方法将响应属性添加到嵌套的对象上。

我们编写如下代码测试给一个对象动态添加属性:

<div id="app">
  <input v-model="form.amount" /> 
  <input type="button" @click="demoSet()" value="setName">
</div>
<script type="text/javascript">
var vm=new Vue({
  el: "#app",
  data: {
    i:0,
    form:{}
  },
  methods:{
    demoSet(){
      this.form.amount=this.i++;
      //this.$set(this.form,"amount",this.i++);
    }
  }
  });
</script>

这种方式可以给form增加一个属性,但是不会界面不会响应更新。

正确的做法:

<div id="app">
  <input v-model="form.amount" /> 
  <input type="button" @click="demoSet()" value="setName">
</div>
<script type="text/javascript">
var vm=new Vue({
  el: "#app",
  data: {
    i:0,
    form:{}
  },
  methods:{
    demoSet(){
      this.$set(this.form,"amount",this.i++);
    }
  }
  });
</script>

这样就可以给对象添加amount 属性了。

这个有什么应用场景呢,比如 data.form 属性很多,其中大部分是不需要要的,这时候,可以使用这种方法实现动态添加需要的属性。

需要注意的是,这种方式是不能给根数据添加属性的,比如:

<div id="app">
  <input v-model="name" /> 
  <input type="button" @click="demoSet()" value="setName">
</div>
<script type="text/javascript">
var vm=new Vue({
  el: "#app",
  data: {
  },
  methods:{
    demoSet(){
      this.$set(this,"name","ray");
    }
  }
  });
</script>

这种方式给data 增加一个 name 属性是无效的。

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
对xmlHttp对象的理解
Jan 17 Javascript
JS读取cookies信息(记录用户名)
Jan 10 Javascript
JS onmousemove鼠标移动坐标接龙DIV效果实例
Dec 16 Javascript
JQuery给元素绑定click事件多次执行的解决方法
May 29 Javascript
javascript遇到html5的一些表单属性
Jul 05 Javascript
javascript表单验证大全
Aug 12 Javascript
用Vue.js实现监听属性的变化
Nov 17 Javascript
Javascript自定义事件详解
Jan 13 Javascript
javascript实现二叉树的代码
Jun 08 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
Sep 02 Javascript
Bootstrap table表格初始化表格数据的方法
Jul 25 Javascript
vue打开新窗口并实现传参的图文实例
Mar 04 Vue.js
js中关于Blob对象的介绍与使用
Nov 29 #Javascript
js blob类型url的视频下载问题的解决
Nov 29 #Javascript
JavaScript之Blob对象类型的具体使用方法
Nov 29 #Javascript
VuePress 中如何增加用户登录功能
Nov 29 #Javascript
Vue.directive 实现元素scroll逻辑复用
Nov 29 #Javascript
Vue.js实现大屏数字滚动翻转效果
Nov 29 #Javascript
Vue基础配置讲解
Nov 29 #Javascript
You might like
PHP中Cookie的使用详解(简单易懂)
2017/04/28 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
php中yii框架实例用法
2020/12/22 PHP
原生js ActiveXObject获取execl里面的值
2013/11/01 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
JS仿淘宝实现的简单滑动门效果代码
2015/10/14 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
2016/06/02 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
JS实现页面打印功能
2017/03/16 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
Node.js之readline模块的使用详解
2019/03/25 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
vue项目中微信登录的实现操作
2020/09/08 Javascript
[57:53]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#3OG VS VP
2016/03/03 DOTA
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
浅谈Python 多进程默认不能共享全局变量的问题
2019/01/11 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
Python @property装饰器原理解析
2020/01/22 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
MATCHESFASHION澳大利亚/亚太地区:英国时尚奢侈品电商
2020/01/14 全球购物
信息专业本科生个人的自我评价
2013/10/28 职场文书
女大学生自我鉴定
2013/12/09 职场文书
应届毕业生简历自我评价
2014/01/31 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
买房子个人收入证明
2014/10/12 职场文书
商务邀请函
2015/01/30 职场文书
办公室主任个人总结
2015/02/28 职场文书
城管年度个人总结
2015/02/28 职场文书
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js
WCG2010 星际争霸决赛 Flash vs Goojila 1 星际经典比赛回顾
2022/04/01 星际争霸