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 相关文章推荐
Ajax::prototype 源码解读
Jan 22 Javascript
jquery ajax方式直接提交整个表单核心代码
Aug 15 Javascript
jQuery动画效果-slideUp slideDown上下滑动示例代码
Aug 28 Javascript
ExtJS4中的requires使用方法示例介绍
Dec 03 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
Mar 04 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
May 18 Javascript
15款最好的Bootstrap在线编辑器
Aug 03 Javascript
微信小程序-小说阅读小程序实例(demo)
Jan 12 Javascript
浅谈webpack编译vue项目生成的代码探索
Dec 11 Javascript
vue项目中引入noVNC远程桌面的方法
Mar 05 Javascript
Vue性能优化的方法
Jul 30 Javascript
Vue中inheritAttrs的使用实例详解
Dec 31 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
一个用于MySQL的PHP XML类
2006/10/09 PHP
php中3种方法统计字符串中每种字符的个数并排序
2012/08/27 PHP
解析php多线程下载远程多个文件
2013/06/25 PHP
PHP实现中文圆形印章特效
2015/06/19 PHP
微信支付开发交易通知实例
2016/07/12 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
PHP中“=&gt;
2019/03/01 PHP
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
JQuery获取当前屏幕的高度宽度的实现代码
2011/07/12 Javascript
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
setInterval()和setTimeout()的用法和区别示例介绍
2013/11/17 Javascript
JQuery中attr方法和removeAttr方法用法实例
2015/05/18 Javascript
javascript动画算法实例分析
2015/07/31 Javascript
微信小程序 封装http请求实例详解
2017/01/16 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
2017/09/28 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
js实现录音上传功能
2019/11/22 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
JS实现canvas简单小画板功能
2020/06/23 Javascript
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
python文字转语音的实例代码分析
2019/11/12 Python
实现Python与STM32通信方式
2019/12/18 Python
keras中模型训练class_weight,sample_weight区别说明
2020/05/23 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
新员工欢迎词
2014/01/12 职场文书
个人工作表现评语
2014/04/30 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
2015年城管个人工作总结
2015/05/15 职场文书
法定代表人身份证明书
2015/06/18 职场文书
运动会口号霸气押韵
2015/12/24 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书