Vue是数据驱动
数据驱动这个是我觉得和jQuery
不一样的地方。
jQuery
是点一下,加个class
,移个class
。
Vue
是点一下,数据记录,然后自动通知视图。
一个是把选中状态保存在了DOM
,一个是把选中状态保存在了js数据模型
里。
所以在看到了使用Vue
然后获取DOM
改class
的行为,我及时制止了他。
数据驱动和之前的思想 在一起会怎么样?
数据驱动是一个数据到视图的过程,如果你只改视图不改数据。那么他在其他的地方刷新了数据,就有可能导致视图不同步。比如写的时候写了,那么读的时候读出来的有可能不一样,为什么会这样?因为有两个地方可以改呀,Vue把DOM删了,新渲染的没有你写的状态,读的时候读个鬼。想想,这一个碰运气的东西,能好使吗?
Vue怎么实现这个效果
说了那么多废话,先上地址吧,传送门-我写的DEMO
下面简单说说三种写法的思路
- 选中的id做成一个数组,多维护一个队列。
:class="{selected: ~checkSelect(item.id)}"
渲染的时候去判断数组里面有那个id没有。
- 选中的id做成一个对象,多维护一个对象。
:class="{selected: selectList[item.id]}"
和前一个相比对象的话,id
作为key
查找起来方便了很多。这里要注意的是.$set
,划重点要考的。
- 直接改原对象,多加一个参数。这个不怎么推荐。