2013-12-19 8 views
0

Я хочу внести некоторые изменения в свой контроллер данных, которые я получаю с сервера. Я привел пример, чтобы объяснить мою проблему. Рекурсивный метод «update», похоже, не обновляет значение $scope.gdevPiechartArchiveVolume. Может ли кто-нибудь сказать мне, почему? Есть ли способ инициировать обновление? Спасибо!Как обновить угловую область

angular.module('socketTestApp') 
    .controller('MainCtrl', function($scope, Socket) { 

     Socket.on('gdevAreachart_archiveVolume_update', function(data_) { 
      selectArchiveData(data_); 
     }); 
     function selectArchiveData(data) { 

      var i = 0; 
      var selectedData; 


      $scope.update = function() { 
       _.delay($scope.update, 2000); 

       if ($scope.pause) 
        return 

       i++ 
       $scope.gdevPiechartArchiveVolume = i; //<--- this seems not to work but only if i set $scope.pause true 
       console.log('Updates in $scope.update: ' + $scope.gdevPiechartArchiveVolume); 
      } 


      $scope.update(); 

     } 

Мой direcitve (наблюдаемые переменные данные "$scope.gdevPiechartArchiveVolume "):

angular.module('socketTestApp') 
    .directive('gdevAreachart', function() { 
     var linker = function(scope, element, attr) { 

      scope.$watch('data', function(newVals, oldVals) { 
       console.log("Direktive: " + newVals); 
       return //make some other thinks 
      }, true); 

выход консоли (далее" Direktive: ..." должен быть напечатан каждый раз, как "Обновление в $ scope.update:") :

Direktive: undefined gdevAreachart.js:14 
Updates in $scope.update: 1 main.js:127 
Direktive: 1 gdevAreachart.js:14   <---- set scope.pause = true ... false to continue 
Updates in $scope.update: 2 main.js:127 
Updates in $scope.update: 3 main.js:127 
Updates in $scope.update: 4 main.js:127 
Updates in $scope.update: 5 main.js:127 
Updates in $scope.update: 6 main.js:127 
Direktive: 6 gdevAreachart.js:14   <---- set scope.pause = true ... false to continue 
Updates in $scope.update: 7 main.js:127 
Updates in $scope.update: 8 main.js:127 
Direktive: 8 gdevAreachart.js:14   <---- set scope.pause = true ... false to continue 
Updates in $scope.update: 9 main.js:127 
Updates in $scope.update: 10 main.js:127 
Direktive: 10 gdevAreachart.js:14   <---- set scope.pause = true ... false to continue 
Updates in $scope.update: 11 main.js:127 
Updates in $scope.update: 12 

Решение:

function selectArchiveData(data) { 

      var i = 0; 
      var selectedData; 


      $scope.update = function() { 


       if ($scope.pause) 
        return 

       i++ 
       $scope.gdevPiechartArchiveVolume = i; 
       console.log('Updates in $scope.update: ' + $scope.gdevPiechartArchiveVolume); 
       setTimeout(function() { 
        $scope.$apply($scope.update()); 
       }, 2000); 
      } 
      $scope.update(); 

     } 
+0

Когда $ scope.pause = true 'if ($ scope .pause) return' будет 'return' и' $ scope.gdevPiechartArchiveVolume = i; 'не будет выполняться. – klode

ответ

0

Вы пытались использовать $ scope. $ Apply()? Вам нужно сделать это каждый раз, когда вы хотите обновить угловую $ область от функции, которая угловатая «не заботится», в вашем случае Socket.on

+0

Спасибо! Я пробовал это раньше, но теперь у меня есть это :) – user2942012

+0

Рад, что я мог бы помочь, не забудьте отметить ответ как правильный ответ :) –

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