2013-12-15 24 views
13

html table oluşturmak için ng-repeat kullanıyorum. Benim denetleyicisi böylece benziyor: Gördüğünüz gibi, ben periyodik $scope.foo dizi güncelleştiriyorumAngularJS ngRepeat güncelleştirme modeli

app.controller("fooCtrl", function($scope, WebSocket) { 
    $scope.foo = [ ... ]; 

    WebSocket.start(function(data) { 
    // this is a callback on websocket.onmessage 
    // here is a for loop iterating through $scope.foo objects and updating them 
    }); 
}); 

. Ancak, benim görünümü şöyle oluşturulur:

<tr ng-repeat="item in foo"> 
    ... 
</tr> 

sorun şu ki, foo güncellerken, yeni verilerle masamı yeniden kılmaz.

Bu problemi nasıl giderim?

+0

Merhaba, belki ng yineleme listesinin en üstüne bir öğe ekleyeceğinizi biliyor musunuz? Listemi güncelleyebilirim - yeni öğe oluşturuldu, ancak listenin sonuna gider. – lulu88

cevap

25

Eğer

$scope.$apply(function() { 
    // update goes here 
}); 

yılında güncelleştirme sarmak mı? Bu sorunu çözmeli. Eğer soket mesajı aldığınızda sadece bağlamak gerekir, benim için kod çalışmalarının ardından

WebSocket.start(function(data) { 
    $scope.$apply(function(){ 
     /* your stuff goes here*/ 
    }); 
    }); 
+4

Ayrıca, değişikliklerden sonra $ scope. $ Apply() koyabilirsiniz. – WMios

3

Muhtemelen gibi bir özet döngüsü yapmak açısal zorlamak $apply() çağırmanız gerekir $ kapsamı() işlevi, $ kapsamı() işlevi

socket.on = function (e) { 

      $scope.$apply(function() { 
       // update you UI over here 
      }); 

     }; 
+0

Bana bir hata veriyor: 'Uncaught TypeError: Nesne # '' Uygulaması '' yöntemini kullanmıyor –

+0

@JanNetherdrake lütfen şu makaleye bakın: http://jimhoskins.com/2012/12/17/angularjs-and-apply .html –

+0

@JanNetherdrake 'Uygula' değil, '$ uygulanır'. – lex82

0

: Eğer listesini güncellerken,