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 相关文章推荐
js 覆盖和重载 函数
Sep 25 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
Dec 17 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
Mar 27 Javascript
使用js检测浏览器的实现代码
May 14 Javascript
原生js和jquery实现图片轮播特效
Apr 23 Javascript
Bootstrap 模态框(Modal)插件代码解析
Dec 21 Javascript
Node.js中.pfx后缀文件的处理方法
Mar 10 Javascript
JavaScript基础心法 数据类型
Mar 05 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
May 17 Javascript
浅谈js中的bind
Mar 18 Javascript
js前端面试之同步与异步问题详解
Apr 03 Javascript
JavaScript实现网页下拉菜单效果
Nov 20 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/04/03 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
2019/11/04 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
python切换hosts文件代码示例
2013/12/31 Python
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
2018/06/14 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
python 构造三维全零数组的方法
2018/11/12 Python
python绘制漏斗图步骤详解
2019/03/04 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
详解Python:面向对象编程
2019/04/10 Python
python自动化测试之DDT数据驱动的实现代码
2019/07/23 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
保护环境的建议书
2014/03/12 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
员工工作及收入证明
2014/10/28 职场文书
公积金接收函格式
2015/01/30 职场文书
农村婚庆主持词
2015/06/29 职场文书
小学六年级毕业感言
2015/07/30 职场文书
《家世》读后感:看家训的力量
2019/12/30 职场文书
Mysql 如何查询时间段交集
2021/06/08 MySQL