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 相关文章推荐
jQuery EasyUI 中文API Button使用实例
Apr 14 Javascript
javascript表单验证 - Parsley.js使用和配置
Jan 25 Javascript
使用iframe window的scroll方法控制iframe页面滚动
Mar 05 Javascript
jquery基础教程之数组使用详解
Mar 10 Javascript
jQuery滚动条插件nanoscroller使用指南
Apr 21 Javascript
JavaScript中操作字符串之localeCompare()方法的使用
Jun 06 Javascript
JS实现浏览器状态栏显示时间的方法
Oct 27 Javascript
jQuery代码实现对话框右上角菜单带关闭×
May 03 Javascript
Angular 应用技巧总结
Sep 14 Javascript
菊花转动的jquery加载动画效果
Aug 19 jQuery
vue element-ui之怎么封装一个自己的组件的详解
May 20 Javascript
如何用JavaScript检测当前浏览器是无头浏览器
Apr 27 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中的使用情况
2015/11/05 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
Laravel学习教程之model validation的使用示例
2017/10/23 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
javascript下过滤数组重复值的代码
2007/09/10 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
深入浅析Vue组件开发
2016/11/25 Javascript
jQuery的事件预绑定
2016/12/05 Javascript
详解Vue 实例中的生命周期钩子
2017/03/21 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
uni-app微信小程序登录授权的实现
2020/05/22 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
2020/07/19 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
[03:35]2018年度DOTA2最佳辅助位选手5号位-完美盛典
2018/12/17 DOTA
python 环境搭建 及python-3.4.4的下载和安装过程
2019/07/20 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
Python学习之路之pycharm的第一个项目搭建过程
2020/06/18 Python
Keras 切换后端方式(Theano和TensorFlow)
2020/06/19 Python
基于python实现复制文件并重命名
2020/09/16 Python
详解如何在登录过期后跳出Ifram框架
2020/09/10 HTML / CSS
英国文胸专家:AmpleBosom.com
2018/02/06 全球购物
学生会竞选演讲稿纪检部
2014/08/25 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
党风廉正建设责任书
2015/01/29 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
社区服务理念口号
2015/12/25 职场文书
AJAX学习笔记
2021/05/18 Javascript