时间:2021-05-26
本文实例讲述了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程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
常规情况下我们在vue实例的data中设置响应数据。但当数据为对象,我们增加或删除对象属性值时,视图并不触发更新,如何解决这个问题呢?实例代码如下:letvm=
本文介绍了vue计算属性的使用和vue实例的方法示例,分享给大家,具体如下:计算属性在模板中表达式非常便利,但是它们实际上只用于简单的操作。模板是为了描述视图的
当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的。{{item.mes
一、在我们使用vue进行开发的过程中,可能会遇到一种情况:当生成vue实例后,当再次给数据赋值时,有时候并不会自动更新到视图上去;向响应式对象中添加一个属性,并
vue为数据添加属性时遇到的坑,通过self.book[i].[‘cur']=false;动态为数据添加属性时,数据变化了,但是视图没有发生更新。具体原因不明白