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 相关文章推荐
javascript字典探测用户名工具
Oct 05 Javascript
IE innerHTML,outerHTML所引起的问题
Jun 04 Javascript
jquery中的$(document).ready()与window.onload的区别
Nov 18 Javascript
return false,对阻止事件默认动作的一些测试代码
Nov 17 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
Jul 31 Javascript
浅谈js构造函数的方法与原型prototype
Jul 04 Javascript
JavaScript中ES6字符串扩展方法
Aug 26 Javascript
AngularJS实现单独作用域内的数据操作
Sep 05 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
May 17 Javascript
详解js动态获取浏览器或页面等容器的宽高
Mar 13 Javascript
Vue实现简单计算器案例
Feb 25 Javascript
vue 导出文件,携带请求头token操作
Sep 10 Javascript
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环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
2007/03/16 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
js 匿名调用实现代码
2009/06/19 Javascript
Javascript事件热键兼容ie|firefox
2010/12/30 Javascript
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
原生js仿jquery实现对Ajax的封装
2016/10/04 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
2017/07/27 Javascript
vue后台管理之动态加载路由的方法
2018/08/13 Javascript
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
[25:59]Newbee vs TNC 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python Mysql自动备份脚本
2008/07/14 Python
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
详解Python爬虫的基本写法
2016/01/08 Python
Python使用正则表达式抓取网页图片的方法示例
2017/04/21 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
Python内置函数 next的具体使用方法
2017/11/24 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
django ModelForm修改显示缩略图 imagefield类型的实例
2019/07/28 Python
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
社区党务公开实施方案
2014/03/18 职场文书
共产党员承诺书
2014/03/25 职场文书
对照检查剖析材料
2014/09/30 职场文书
年终工作总结范文2014
2014/11/27 职场文书
英文商务邀请函范文
2015/01/31 职场文书
客房服务员岗位职责
2015/02/09 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书