J'utilise ng-repeat
pour rendre un html table
. Mon contrôleur ressemble à ceci:
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
});
});
Comme vous pouvez le constater, je mets à jour le tableau $scope.foo
périodiquement. Cependant, mon point de vue est construit comme suit:
<tr ng-repeat="item in foo">
...
</tr>
Le problème est que, lorsque je mets à jour foo
, la nouvelle table ne sera pas rendue avec de nouvelles données.
Comment pourrais-je résoudre ce problème?
Avez-vous terminé la mise à jour
$scope.$apply(function() {
// update goes here
});
? Cela devrait résoudre le problème.
Vous devez probablement appeler $apply()
pour forcer angular à effectuer un cycle de résumé lors de la mise à jour de la liste, par exemple:
WebSocket.start(function(data) {
$scope.$apply(function(){
/* your stuff goes here*/
});
});
Après le code fonctionne pour moi, chaque fois que vous recevez un message de socket, vous devez simplement lier votre code dans $ scope.
socket.on = function (e) {
$scope.$apply(function () {
// update you UI over here
});
};