Vue进阶幺肆零):vue数组或对象更新后,视图不更新的解决方案

网友投稿 1975 2022-05-30

在项目开发过程中,若将页面元素全部绑定于一个表单中,且页面中的某些元素并未直接获得,在获取页面操作值时就会出现意外效果,例如不能重置页面元素。

场景复现

需求:在使用el-select设计表单下拉框时,若后台返回的下拉框数组长度为1,则默认选中第一个元素。

思路:后台返回值后直接将第一个元素的value赋值给el-select的v-model。

created() { .... this.MissionTemplateForm.state = this.StatusOptions[0].display_name },

1

2

3

Vue进阶(幺肆零):vue数组或对象更新后,视图不更新的解决方案

4

但是后台方法返回值后,为el-select赋值前,MissionTemplateForm已经赋值了response.returnobj,导致MissionTemplateForm的结构被破坏,故需要对MissionTemplateForm中的属性进行重新设定。需要使用

Vue.set( target, propertyName/index, value )

1

大家都知道vue是双向绑定响应式更新视图的,这个自动更新视图主要是针对在data里面定义的属性或者对象的键,比如有个data:{ test : 'test'};这里修改 test的值就可以自动更新相关的视图。但是,如果你后面添加一个新的属性进去然后修改 是没法自动更新的,这就涉及vue的双向绑定原理啦。

vue 默认的是将data 属性添加到侦察器(发布者——订阅者模式)上观察,如果有变化就响应视图更新,后面新增的属性和对象是没有做添加到观察器的这步操作的,所以需要手动添加,就需要用到Vue的set方法。

Vue.set(app.arr,1,'qq')

1

参数:

第一个参数想要修改的数组或者对象

{Object | Array} target

1

第二个参数想要修改的对象名称或者对应的下标

{string | number} propertyName/index

1

第三个参数想要修改成功后的值

{any} value

1

返回值是第三个参数 value

示例如下:

let obj = this.dryingList[ind]; this.$set(obj, "nodianzanflag", true);

1

2

参考文档

https://cn.vuejs.org/v2/api/#Vue-set

《Vue进阶(九十七):vue给对象动态添加属性和值》

《Vue进阶(九十八):Vue.set()和this.$set()介绍》

Vue 数据结构

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:用华为云Ubuntu搭建LAMP环境
下一篇:小花带你一周入门html+css(四)CSS进阶之盒子模型与文档流丨【WEB前端大作战】
相关文章