如何避免使用ng-repeat重复项目并丢弃angularjs?

塞尔希

您能给我一些问题的建议吗?我有下一种情况:

1.我从服务器加载项目列表并在容器中用ng-repeat列出它:

<div layout="column" id={{vm.folderId}}container flex layout-align="start center" class='container' dragula='"first-bag"'>
   <div id={{item.id}}child class="md-whiteframe-5dp capitalize itemsInList" layout="column"  ng-repeat="item in vm.workItems | filter:search">
      <div layout="column" flex >
         <div class="workItemName">{{vm.getWorkItemName(item.metadata)}}</div>
         <div class="workItemDescription">{{vm.getWorkItemDescription(item.metadata)}}</div>
      </div>
   </div>
</div>

因此,可以说我们列出了下一个列表:

item_1
item_2
item_3
item_4

而不是将另一个元素放入此容器ITEM_5。服务器删除后,服务器会给我新的列表:item_1-item_2-item_3-item_4-item_5,然后vm.workItems在这里更新

if (data.ok) {
    if (data.content.items.length != vm.workItems.length) {
        vm.workItems = data.content.items; //from server
        SharedDataService.setLastUpdateTimeStamp(SharedDataService.getNewUpdateTimeStamp());
    }
}

在ng-repeat新鲜的物品之后,它也会在列表中查看放置的元素。所以最后我有:

item_1 //ng-repeated
item_2 //ng-repeated
item_3 //ng-repeated
item_4 //ng-repeated
item_5 //ng-repeated
item_5 //droped element

如何避免这种情况?有正常的解决方法吗?

更新。我删除了元素,当它被删除时,我向服务器发出请求以将新项目添加到列表中:

  $scope.$on('first-bag.drop', function (e, el, container) {
        var elementId = parseInt(el[0].id);
        var newContainerId = parseInt(container[0].id);
        var newPrevElementId;
        var newPrevElement = document.getElementById(el[0].id).previousElementSibling;

        if(newPrevElement) {
            newPrevElementId = parseInt(newPrevElement.getAttribute('id'));
        } else  if(!newPrevElement)  {
            newPrevElementId = newContainerId;
        }

        if(exContainerId != newContainerId) {
            WebSocketService.addItem(elementId, exContainerId,
}
}
拉维·特亚(Ravi Teja)

你可以做

ng-repeat="item in vm.workItems track by item.id | filter:search"

如果每个项目都有一个唯一的ID(或某些唯一属性),并且您使用track byID,则即使服务器返回的先前项目已添加了新项目,DOM也不会重新呈现,只有新项目会被添加到DOM。

柱塞(看一下控制台)

ng-repeat当对象在对象列表中重复时,$$hashkey每个对象添加属性

当服务器返回新数据时,尽管已经存在对象,但是由于新数据(每个对象)中不包含$$hashkey属性,因此请ng-repeat重新渲染,然后认为它们是新对象。

如果使用track by IDng-repeat不会添加一个$$hashkey属性,它一直采用跟踪每个项目ID因此,即使服务器再次返回相同的数据,由于ID的匹配,ng-repeat也不会重复它们。如果有新的ID,则将其呈现给DOM。

看一下这篇博客文章

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何避免ng-repeat + bootstrap崩溃的重复ID

如何在AngularJs中使用ng-repeat重复重复的对象?

如何使ng禁用以检查ng-repeat中的项目值(使用AngularJS)

使用ng-leave删除列表中的项目时如何避免空间

AngularJS,ng-repeat不重复

AngularJS-如何在ng-repeat中重复tr

Angularjs表头不断重复(使用ng-repeat)

如何从AngularJS ng-repeat中排除项目

AngularJS-如何正确使用ng -repeat

如何使用ng-repeat:Angularjs?

ng-repeat添加项目(AngularJs 1.2.26)

AngularJs:ng-repeat =“ arrayValue中的项目”

使用 ng-repeat AngularJS 计算数组中的项目

如何使用ng-repeat快速参考生成的项目之间的angularjs?

如何在 angularjs 中使用 ng-repeat 时显示特定项目内的数据?

如何在 angularjs 中使用 ng-repeat 访问带方括号的项目

如何避免在ng-repeat循环中呈现定义标签?

使用ng-if时,角度避免代码重复

如何使用Browserify避免代码重复

如何避免重复CSS而不使用!important?

如何避免在Meteor中使用重复的模板?

如何使用Mongodb C ++避免重复

使用JavaScript绘制后如何避免重复?

使用for循环循环时如何避免重复?

如何避免使用ASM重复代码?

如何通过单击 Angularjs ng-repeat 项目在模态上显示项目

AngularJS NG-repeat:如何在必须过滤唯一值的ng-repeat中重复数据

删除对象中的重复键的AngularJS ng-repeat问题

在ng-repeat表Angularjs中捕获重复异常