$set采坑记

  前几天做后台管理系统时,里面有一个涉及到对申请者的信息修改,对原来已经有的申请者,只能进行积分的修改或者是删除申请者,同时对新增申请者可以选择姓名、调整积分。由于新增申请者跟原有申请者的操作跟展示效果都不一样,所以在展示申请者的时候,我用tag这个字段来进行区分,最后把这个tag传给后台进行数据处理。新增的obj在推入时就会一并添加一个tag属性,且其值为”add”,删除的是直接使用index对数组中某一项新增tag属性,且其值为delete。展示层对于tag值为delete的则不展示,由于tag这个属性是新增的,所以需要使用$set,否则视图层不会响应。在我添加$set之后,我发现了另外一个诡异的问题,就是在点击删除之后,后面新增的obj都不再展示。此时我打印数据,发现数据是正常的,就是被删除的obj的tag是delete,而之前新增的tag还是add,那为什么会不展示了呢??这个问题我到现在也没搞懂,但是这个问题只有两种可能,一种是我的展示逻辑写的有问题,另一种就是vue有bug。等我去理解$set的源码或许会得到解答。
  最后同事小赵提出了一种解决方案,在获取到申请者数据时,用$set循环为每一个obj添加tag属性,且该值置为空。然后后台有变动的时候,在直接修改tag属性。果然用这种方法之后,视图就正常显示了。但是我还是没搞懂这样子能解决问题的理由。。。等我找到答案时再回来更新,未完待续