vue 数据发生改变,视图确没发生改变。

时间:2024-04-12 13:06:44

有一段时间没碰到bug了,昨天碰到一个bug,弄的头有点小疼。
父组件里面,我请求接口获取数组 传给子组件 :list=list;
子组件接收。for list渲染列表。。
我的需求就是列表的每一项可以点击选中,再点击取消
vue 数据发生改变,视图确没发生改变。
就是点击左边的勾选。
然后我想的是,给list下的每个对象加一个check属性,在图片那里用三元表达式,为true就显示选中,为false就显示未☑️。
点击的事件 cell(item,index) .我把当前项和index传了过来。
在事件里面我用 item.check=!item.check console.log(item.check).
这时候发现,打印确实是true和false在切换,但是图片没有切换,,
就是说渲染的list没有发生改变,我又在点击事件里打印console.log(this.list)这是父组件传过来的数组,却发现,这里面的check属性确实也改变了, 我在template里面又用 {{item.check}}.发现什么都没。
初始化的this.list是没有check这个属性,这个属性是我点击后加上。视图没有更新。不是没更新。是没监听到check属性。所以我们在父组件获取到list的时候给它加上check:false。
vue 数据发生改变,视图确没发生改变。重新赋值会触发getter 对数组里的元素进行监听,此时有check 所以可以监听;
这里也注意一下,我用foreach没成功,使用的map成功了,因为foreach是修改没有返回,而map是返回一个新数组。

唉,记录一下,踩坑不要慌,一步一步的找到他的特性。发现他的问题。最后解决他。