【发布时间】:2016-10-07 07:26:17
【问题描述】:
你能告诉我一些问题的正确方法吗? 我有下一个情况:
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,
}
}
【问题讨论】:
-
发现另一个类似的问题。 http://stackoverflow.com/a/24490995/5726639。这可能会帮助你。 Angular-filter
标签: angularjs angularjs-ng-repeat