2015-11-05 60 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]); 
相关问题