"跟踪$ index"使用ng-repeat在保存时创建重复项

时间:2015-04-28 06:41:51

标签: angularjs angularjs-scope angularjs-ng-repeat

我在更新对象时遇到问题,它在模型中创建了此实例(singleOrder)的副本,而不是更新现有的实例。我无法清除整个$ scope并重新加载,因为我只更新了部分对象。

这是我的保存功能:

$scope.saveDetails = function(singleOrder, data, status) {              

    OrdersService.updateOrders(singleOrder.order)

    .success(function(data, status) {
        angular.extend(singleOrder, data);                      
    })                             
}

singleOrder 与我的主 OrderDetails 对象的实例有关,用于 ng-repeat

<div ng-repeat="singleOrder in orderDetails track by $index">

以下是我的OrdersService中调用的函数,如果有帮助的话:

getData.updateOrders = function(data){
    var url = '/service/rest/orders';

    return $http.post(url, data)                    
};

感谢您提供的任何帮助。



更新: 我已尝试弄乱track by,并收到以下结果:

<div ng-repeat="singleOrder in orderDetails track by $index"> 保存内容正常,但在dom上创建重复订单。

<div ng-repeat="singleOrder in orderDetails track by singleOrder.order.id"> 这适用于每个订单都有唯一ID。我可以保存好并且它不会在dom中创建副本,但我在控制台中得到不允许在转发器中重复

对于为什么会发生这种情况感到困惑。欢迎任何想法!

2 个答案:

答案 0 :(得分:2)

angular.extend()返回目标对象,所以也许你可以做这样的事情

OrdersService.updateOrders(singleOrder.order)
.success(function(data, status) {
    singleOrder = angular.extend(singleOrder, data);                      
})

但是在我看来,当服务器返回客户端需要的整个对象时,它会更好。代码会更容易。

答案 1 :(得分:0)

为了跟进这一点,似乎问题不在于Angular,而是对象中的数据。我无法确切地说出问题的确切部分,但在内容更新后,这开始使用track by $index

感谢大家的帮助!