为了账号安全,请及时绑定邮箱和手机立即绑定

vue数据渲染遇到一个bug

vue数据渲染遇到一个bug

慕尼黑8549860 2019-03-23 19:15:14
问题描述vue项目从接口取回的数据,数据格式如下然后赋值给组件data中的cashData,应为交互中要用,所以给数组中的每个item添加一个变量,,v-for循环cashData,,渲染出来的效果如下:,点击门店名称,修改showProInfoFlag为false,发现页面并没有改变但是通过控制台打印,发现数据其实已经变化了,是vue没有监听到吗?
查看完整描述

4 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

因为 Vue 无法探测普通的新增属性 

问题在于下面这句:


this.cashData.forEach((item)=>{

    item.showProInfoFlag = true;

})

因为 你在data里声明了cashData的值 所以cashData已经是响应式的 this.cashData = data 这句话 vue会递归将数据包装成响应式数据

但是你这个数据之前data应该没有这个showProInfoFlag值 所以这里没有监听到,通过item.showProInfoFlag只是单纯的对象赋值


总结成下面:


this.cashData = 1 

//这个可以监听到 因为cashData已经是响应式 


this.cashData = {}

this.cashData.showProInfoFlag = 1;

//不可以监听到 因为vue不知道你有showProInfoFlag 这个属性


this.cashData = {showProInfoFlag:''}

this.cashData.showProInfoFlag = 2;

//可以监听到 因为vue知道你有showProInfoFlag 这个属性

你一调换一下位置:


data.forEach((item)=>{

    item.showProInfoFlag = true;

})

this.cashData = data;

或者:


this.cashData.forEach((item)=>{

    this.$set(item,'showProInfoFlag',true)

})


查看完整回答
反对 回复 2019-04-14
?
慕标5832272

TA贡献1966条经验 获得超4个赞

楼上正解,因为vue里面对象是被数据劫持的,所以它有专门的$set的方法来处理对象赋值的问题


查看完整回答
反对 回复 2019-04-14
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

这是VUE中的一个坑,不过VUE官方文档中有详细说明,有空还是认真读一遍文档吧


查看完整回答
反对 回复 2019-04-14
  • 4 回答
  • 0 关注
  • 1083 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信