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实现div的切换特效上一个下一个
Feb 11 Javascript
javascript实现复制与粘贴操作实例
Oct 16 Javascript
JS+CSS实现自适应选项卡宽度的圆角滑动门效果
Sep 15 Javascript
向JavaScript的数组中添加元素的方法小结
Oct 24 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
Sep 19 Javascript
JavaScript随机生成颜色的方法
Oct 15 Javascript
如何利用JQuery实现从底部回到顶部的功能
Dec 27 Javascript
js实现适合新闻类图片的轮播效果
Feb 05 Javascript
vue+axios+promise实际开发用法详解
Oct 15 Javascript
关于React动态加载路由处理的相关问题
Jan 07 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
Apr 24 Javascript
layui多iframe页面控制定时器运行的方法
Sep 05 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
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
zend framework文件上传功能实例代码
2013/12/25 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
2015/04/21 PHP
php通过排列组合实现1到9数字相加都等于20的方法
2015/08/03 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
jQuery实现磁力图片跟随效果完整示例
2016/09/16 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
vue-lazyload图片延迟加载插件的实例讲解
2018/02/09 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
vuex 的简单使用
2018/03/22 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
jQuery实现视频展示效果
2020/05/30 jQuery
在Vue中创建可重用的 Transition的方法
2020/06/02 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
python生成器generator用法实例分析
2015/06/04 Python
Python学习笔记之文件的读写操作实例分析
2019/08/07 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
新西兰领先的鞋类和靴子网上商城:Merchant 1948
2017/09/08 全球购物
武汉英思工程科技有限公司&ndash;ORACLE面试测试题目
2012/04/30 面试题
2014年个人技术工作总结
2014/12/08 职场文书
2015年招聘工作总结
2014/12/12 职场文书
浅谈Web Storage API的使用
2021/06/23 Javascript
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL
win7配置本地ftp服务器的图文教程
2022/08/05 Servers