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 对象比较实现代码
Apr 27 Javascript
jQuery Jcrop插件实现图片选取功能
Nov 23 Javascript
js添加table的行和列 具体实现方法
Jul 22 Javascript
js window.open弹出新的网页窗口
Jan 16 Javascript
Javascript实现可旋转的圆圈实例代码
Aug 04 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
Sep 04 Javascript
JS基于Mootools实现的个性菜单效果代码
Oct 21 Javascript
学习JavaScript设计模式之代理模式
Jan 12 Javascript
JavaScript循环遍历你会用哪些之小结篇
Sep 28 Javascript
环形加载进度条封装(Vue插件版和原生js版)
Dec 04 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
Jul 22 Javascript
three.js 制作动态二维码的示例代码
Jul 31 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生成excel时单元格内换行问题的解决方法
2010/08/26 PHP
php实现监控varnish缓存服务器的状态
2014/12/30 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
Laravel框架中集成MongoDB和使用详解
2019/10/17 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
JavaScript 设计模式学习 Factory
2009/07/29 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
2015/09/19 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
javaScript语法总结
2016/11/25 Javascript
微信小程序实战篇之购物车的实现代码示例
2017/11/30 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
python创建文件备份的脚本
2018/09/11 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
解决django后台管理界面添加中文内容乱码问题
2019/11/15 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
Python collections.deque双边队列原理详解
2020/10/05 Python
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
2012/12/09 HTML / CSS
HTML5实现的图片无限加载的瀑布流效果另带边框圆角阴影
2014/03/07 HTML / CSS
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
Viking比利时:购买办公用品
2019/10/30 全球购物
linux面试相关问题
2013/04/28 面试题
十一酒店活动方案
2014/02/20 职场文书
贷款承诺书范文
2014/05/19 职场文书
2014年班务工作总结
2014/12/02 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle
图文详解Nginx版本平滑升级方案
2021/09/15 Servers