2016-06-21 2 views
2

я пытаюсь обновить РОМ с данным API, но я получаю «$ часов не определен» вот мой Ctrl

app.controller('counter', ['$scope', 'factory', function ($scope, factory) { 
    factory.get(function (res) { 
     $scope.proizvedeno = res; 
     $scope.output = $scope.proizvedeno.total_energy_output; 

     $scope.countTo = $scope.output; 
     $scope.countFrom = 0; 
$scope.$watch("output", $scope.countTo) 
console.log($watch); 

     $scope.reCount = function() { 
      $scope.countFrom = Math.ceil(Math.random() * 300); 
      $scope.countTo = Math.ceil(Math.random() * 7000) - Math.ceil(Math.random() * 600); 
     }; }]); 

Я пытаюсь добавить функцию часов, чтобы автоматически обновить dom, но это не работает. Может кто-то помочь мне PLS.

+0

удалить console.log ($ watch); – Thalaivar

+0

Вы не создаете переменную, называемую '$ watch', где бы вы ни были зарегистрированы. Я предлагаю вам больше узнать, что такое часы Angular и как работают. – sdgluck

+0

Я читал с https://docs.angularjs.org/api/ng/type/$rootScope.Scope, и я не вижу, где объявлен var $ watch. Могу ли вы у меня? Thnx @thalaivar тоже – Arter

ответ

0

Позвольте мне ответить как можно скорее, поэтому приносит больше clarity.

Ваш фактический код:

app.controller('counter', ['$scope', 'factory', function ($scope, factory) { 
    factory.get(function (res) { 
     $scope.proizvedeno = res; 
     $scope.output = $scope.proizvedeno.total_energy_output; 

     $scope.countTo = $scope.output; 
     $scope.countFrom = 0; 
     $scope.$watch("output", $scope.countTo) //Changed this 
     console.log($watch); //removed this line 

     $scope.reCount = function() { 
      $scope.countFrom = Math.ceil(Math.random() * 300); 
      $scope.countTo = Math.ceil(Math.random() * 7000) - Math.ceil(Math.random() * 600); 
     }; }]); 

реформатской один:

app.controller('counter', ['$scope', 'factory', function ($scope, factory) { 
    factory.get(function (res) { 
     $scope.proizvedeno = res; 
     $scope.output = $scope.proizvedeno.total_energy_output; 

     $scope.countTo = $scope.output; 
     $scope.countFrom = 0; 
     $scope.$watch("output", 
       function handleChange(newValue, oldValue) { 
        console.log("$scope.output:", newValue); 
     }) 

     $scope.reCount = function() { 
      $scope.countFrom = Math.ceil(Math.random() * 300); 
      $scope.countTo = Math.ceil(Math.random() * 7000) - Math.ceil(Math.random() * 600); 
     }; }]); 
+1

Благодарю вас, я попробую, когда я приду домой. Теперь я покидаю офис – Arter

+0

Привет, я использую это, но есть без изменений в dom после добавления новых данных в базу данных. только после обновления ... Я хочу жить данными. Thnx – Arter

+0

эй @ Тхалавар вы там? – Arter

0

привет ребята я это исправить с тайм-аут, я не знаю, это лучшее решение, но это работает меня. Thnx всем

app.controller('counter', ['$scope', '$http', '$timeout', function ($scope, $http, $timeout) { 
$scope.reload = function() {    //add new function for timer 
$http.get(serviceBase + 'live-stats'). 
    success(function (res) { 
     $scope.proizvedeno = res; 

      $scope.wireless_charging_count = $scope.proizvedeno.wireless_charging_count; 
      $scope.countTo3 = $scope.wireless_charging_count; 
      $scope.countFrom3 = 0; 
      $scope.reCount = function() { 
      $scope.countFrom3 = Math.ceil(Math.random() * 300); 
        $scope.countTo3 = Math.ceil(Math.random() * 7000) - Math.ceil(Math.random() * 600); 
      }; 

     }); 
     var reload = $timeout(function(){   //set here $timeout 
      $scope.reload(); 
      }, 5000); 
      $scope.$on('$destroy', function(){  //must cancel $timeout 
$timeout.cancel(reload); 
}); 
    }; 
    $scope.reload();  
}]); 

U должен отменить таймер, или вы будете иметь проблемы, как я :), после того, как таймер изменения маршрута до сих пор работает и перезагружать данные из URL. Thnx каждому