美文网首页
angularJS里的ng-repeat的坑

angularJS里的ng-repeat的坑

作者: 前端搬砖工曹果 | 来源:发表于2018-10-25 17:13 被阅读54次
    情景:

    一般我们写代码的时候需要渲染列表等。

    实现:

    使用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

    场景如图,当你展示的列表需要过滤时,而你过滤出来的列表用户可能会去做增删改变顺序的操作,可能会暴露出来的bug是会发现你操作删除后你并不想删除的一个元素被删除了。问题所在是因为过滤前数据的index和过滤后的index会不一样,因为index绑定在当前的item里了,所以类似操作index需要谨慎操作。

    解决办法:

    可以在渲染数据前我们给数据手动生成item.id属性来代替$index

    相关文章

      网友评论

          本文标题:angularJS里的ng-repeat的坑

          本文链接:https://www.haomeiwen.com/subject/oarctqtx.html