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插件开发的五种形态小结
Mar 04 Javascript
jQuery实现的多滑动门,多选项卡效果代码
Mar 28 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
Oct 14 Javascript
JS获取年月日时分秒的方法分析
Nov 28 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
Mar 08 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
Apr 13 Javascript
JS写谷歌浏览器chrome的外挂实例
Jan 11 Javascript
jQuery实现获取动态添加的标签对象示例
Jun 28 jQuery
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
Aug 24 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
Mar 03 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
Apr 30 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
Jul 21 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控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
php,ajax实现分页
2008/03/27 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
PHP模板解析类实例
2015/07/09 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
PHP实现图片压缩
2020/09/09 PHP
一段利用WSH修改和查看IP配置的代码
2008/05/11 Javascript
仿猪八戒网左下角的文字滚动效果
2011/10/28 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
jQuery中nextAll()方法用法实例
2015/01/07 Javascript
jquery实现多屏多图焦点图切换特效的方法
2015/05/04 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
AngularJS 最常用的功能汇总
2016/02/17 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
JavaScript常用截取字符串的三种方式用法区别实例解析
2018/05/15 Javascript
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
优雅的在React项目中使用Redux的方法
2018/11/10 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
Stio官网:男女、儿童户外服装
2019/12/13 全球购物
怎样声明接口
2014/09/19 面试题
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
创先争优标语
2014/06/27 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
2015年环卫工作总结
2015/04/28 职场文书
创业计划书之水果店
2019/07/18 职场文书
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android
python全面解析接口返回数据
2022/02/12 Python