vue 新增数组或对象更新后,视图不更新的解决方案
【摘要】 一、前言在项目开发过程中,若将页面元素全部绑定于一个表单中,且页面中的某些元素并未直接获得,在获取页面操作值时就会出现意外效果,例如不能重置页面元素。 二、场景复现需求:在使用el-select设计表单下拉框时,若后台返回的下拉框数组长度为1,则默认选中第一个元素。思路:后台返回值后直接将第一个元素的value赋值给el-select的v-model。created() {.... ...
一、前言
在项目开发过程中,若将页面元素全部绑定于一个表单中,且页面中的某些元素并未直接获得,在获取页面操作值时就会出现意外效果,例如不能重置页面元素。
二、场景复现
需求:在使用el-select
设计表单下拉框时,若后台返回的下拉框数组长度为1,则默认选中第一个元素。
思路:后台返回值后直接将第一个元素的value
赋值给el-select
的v-model
。
created() {
....
this.MissionTemplateForm.state = this.StatusOptions[0].display_name
},
但是后台方法返回值后,为el-select
赋值前,MissionTemplateForm
已经赋值了response.returnobj
,导致MissionTemplateForm
的结构被破坏,故需要对MissionTemplateForm
中的属性进行重新设定。需要使用
Vue.set( target, propertyName/index, value )
针对在data
中定义的属性或者对象的键,vue
采用双向绑定响应式更新视图方式,比如有个data:{ test : 'test'};
,通过修改 test
的值就可以自动更新相关的视图。但是,如果对象属性后面再添加一个新的属性进去然后修改是没法自动更新的,这就涉及vue
的双向绑定原理。
vue
默认将data
属性添加到侦察器(发布者——订阅者模式)上观察,如果有变化就响应视图更新,后面新增的属性和对象是没有实现添加到观察器这步操作的,所以需要手动添加,就涉及用到Vue
的set
方法。
Vue.set(app.arr,1,'qq')
参数:
第一个参数想要修改的数组或者对象。
{Object | Array} target
第二个参数想要修改的对象名称或者对应的下标。
{string | number} propertyName/index
第三个参数想要修改成功后的值。
{any} value
返回值是第三个参数 value
示例如下:
let obj = this.dryingList[ind];
this.$set(obj, "nodianzanflag", true);
三、拓展阅读
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)