angularJS里的ng-repeat的坑
情景:
一般我们写代码的时候需要渲染列表等。
实现:
使用ng-repeat
可以实现。
ng-repeat的坑:
ng-repeat
这个指令在运行时如果列表数据里有重复的值时会抛出异常,这是因为ng-repeat
在渲染数据时会重新编译需要渲染的数据,给每个元素加上一个唯一的$$hashKey
属性可以与生成的dom绑定,以便追。如果元素重复,会导致自动生成$$hashKey
错误。
解决办法:
ng-repeat = "item in items track by $index"
track by $index
是不去用angular自动生成$$hashKey
,而是直接把元素的索引拿来绑定。
使用track by
的好处:ng-repeat
的数组被替换时, 它默认并不会重新利用已有的 dom 元素,会删除所有再次重新渲染。加了track by
,会给当前已有dom元素加上标示,会利用已有元素,如果已有元素里已存在,就不会去重新渲染。
使用$index的坑
文章图片
使用$index的场景.png
【angularJS里的ng-repeat的坑】场景如图,当你展示的列表需要过滤时,而你过滤出来的列表用户可能会去做增删改变顺序的操作,可能会暴露出来的bug是会发现你操作删除后你并不想删除的一个元素被删除了。问题所在是因为过滤前数据的index和过滤后的index会不一样,因为index绑定在当前的item里了,所以类似操作index需要谨慎操作。
解决办法:
可以在渲染数据前我们给数据手动生成item.id
属性来代替$index
。
推荐阅读
- 村里的故事|村里的故事 --赵大头
- 你眼里的不公平,其实很公平
- 时光,是行走在文字里的眷恋
- 住在棺材里的老人
- 冬日里的那一抹暖阳
- 计划生育科里的那些事(1)——神转折大赛
- 《拆掉思维里的墙(原来我还可以这样活》)
- 给你一个公司里的最高权力,你会做…|给你一个公司里的最高权力,你会做… … ?
- 茶事|茶事 | 单丛里的一泡奇葩
- 办公室里的"完美"S小姐