2014-05-20 4 views
0

Я пытаюсь сделать следующее:Обновление модели программно в angularjs

angular.module("controllers", []) 
    .controller("FooController", function($scope) { 
     $scope.foo = {}; 
     $scope.foo['bar'] = 0; 
     setInterval(function(){ 
      $scope.foo['bar']++; 
     }, 100); 
}); 

И потом, я показываю значение foo.bar на мой взгляд, используя

<div> {{ foo.bar }} </div> 

Начальное значение отображается правильно, но он никогда не обновляется. Обратный вызов внутри setInterval вызывается правильно, а значение bar обновляется в javascript.

Как я могу программно «подтолкнуть» свои данные к модели? (В моем реальном приложении я буду толкая данные с сервера через WebSockets/атмосфера)

+1

[$ интервал] (https://docs.angularjs.org/api/ng/service/$interval) – meze

ответ

-1

Хорошо, я нашел ответ: завернуть $scope.foo['bar']++ в

0

Вы должны вызвать новый цикл digest , в котором Angular проверит все зарегистрированные часы и обновит представление для объектов, изменивших значение. Вы можете сделать это, вызвав $scope.$apply, что вызовет цикл дайджеста для вас.

setInterval(function(){ 
    $scope.$apply(function() { 
     $scope.foo.bar++; 
    }) 
}, 100); 
+0

Почему downvote? Это эквивалентно '$ interval'. Это неверно. – link

2

Если вы используете функцию углового интервала $, а не setInterval. Тогда вам не нужно будет называть $ scope. $ Apply.

angular.module("controllers", []) 
    .controller("FooController", function($scope, $interval) { 
     $scope.foo = {}; 
     $scope.foo['bar'] = 0; 
     $interval(function(){ 
      $scope.foo['bar']++; 
     }, 100); 
}); 
+0

Речь идет скорее об общем «толчке», а не о решении манекена setTimeout (как я писал, реальное приложение будет использовать push-приложение, в этом случае приложение будет работать, а интервал не будет полезен) – jfu

Смежные вопросы