2015-11-05 32 views
0

我的應用程序經常收到更新,它似乎工作正常,但有時特別是在生產中要處理的數據更大時,我沒有看到我的範圍正確更新。服務器發送事件後正確應用範圍更改

這裏就是我實際上做:

var handleOrdersCallback = function (msg) { 
    var data = JSON.parse(msg.data); 
    $scope.$apply(function() { 
    var status = data.status.status; 
    var order_index = _.findIndex($scope.orders, function (order) { 
     return order.id === data.id; 
    }); 

    if (order_index > -1) { 
     var previousState = $scope.orders[order_index].status.status; 
     $scope.orders[order_index] = data; 

     if (previousState === 'unassigned' && status === 'cancelled') { 
     $scope.orders.splice(order_index, 1); 
     Broadcaster.remove(); 
     } else if (status === 'cancelled' || status === 'completed') { 
     $scope.orders.splice(order_index, 1); 
     } else { 
     if (status === 'assigned') { 
      Broadcaster.add(); 
     } 
     Broadcaster.update(data); 
     } 
    } else { 
     $scope.orders.unshift(data); 
     if ($scope.dataLoaded) { 
     Broadcaster.add(); 
     } 
     if (status === 'unassigned') { 
     Broadcaster.new(data); 
     } 
    } 
    }); 
}; 

var source = new EventSource('/updates'); 
source.addEventListener('orders', handleOrdersCallback, false); 

我不知道如果我這樣做是正確包裝內$scope.$apply一切,但說實話,我不知道是否有東西改變或者如果它能更好地以不同的方式對其進行編碼。

這就是爲什麼我在這裏問。

回答

1

在這個代碼塊的問題是你如何更新$scope

$scope.orders[order_index] = data; 

的解決方案是使用angular.copy:

angular.copy(data, $scope.orders[order_index]);