Front-end Dev Engineer

0%

Vue中对象数组数据的绑定问题

在Vue项目练习中,测试发现对于对象数组的内部数据的改变时,Vue的页面并没有出现数据的刷新操作,对该问题的分析和解决方法查看具体文档内容;

Vue中对象数组数据的绑定问题

1. 发现问题

Vue的项目中,关于对象数组的问题,测试场景是在优惠券列表中大组件中嵌套单个优惠券,当选择某一个优惠券时,修改通过父组件传递过来的对象数据,其中父子组件是通过 props属性在子组件中接收数组中的对象的数据,在子组件中data中设置一个变量判断该子组件是否选中,初始数据为通过props传递的数据,并在template进行展示,最后改变状态是在子组件中通过 $emit发布订阅模式,测试到了改变父组件中的对象数组中的数据,但是测试中并没有子组件中数据显示的同步,没有改变相应的状态;
画图

2. 问题原因分析

  1. 在父组件中是通过v-for循环遍历对象数组数据,将遍历的每一个对象传递到每一个子组件中,子组件通过props接收对象,当子组件中通过 $emit发布订阅模式修改父组件中数据时,父组件中的对象数组是该改变了,不过可能由于数据嵌套层次更深,所以双向数据绑定失败,因而使用Vue的全局API接口Vue.set( target, key, value ),手动在父组件中修改数据,测试发现数据还是没有实现展示;
  2. 然后发现展示状态是通过在子组件中data中设置一个变量进行控制的,该变量初始化数据是父组件传递的对象数据中的状态展示属性,不过在修改了父组件中的该数据后,子组件中的数据没有改变,因而造成Vue的双向数据绑定失败;

3. 尝试解决问题的方法

  1. 使用Vue的全局API接口Vue.set( target, key, value ),手动修改对象数组数据;
  2. 删除设置在子组件data中的状态控制变量,直接使用props传递的对象数据进行状态的控制;

4. 解决问题的方法

在子组件中,不要在data中设置一个状态展示变量,而是直接将通过props中获取的对象中的变量在template中使用,当修改了父组件中的对象数组中的数据时,会自动将传入子组件的数据进行修改,状态展示也发生了变化,实现了数据的绑定;
画图2

-------------    本文结束  感谢您的阅读    -------------

赞赏一下吧~ 还可以关注公众号订阅最新内容