2016-02-11 2 views
1

Я новичок в Angularjs и поэтому хотел бы спросить вас, есть ли лучший способ решить мою проблему.

Мне нужно обновить, например, каждые 30 секунд содержимое <div> с помощью вызова ajax.

HTML

<div> 
    <div>{{test.value}}</div> 
</div> 

Моя идея использования $interval на service следующим образом:

.service('eedisplayService', function($q, $http, $interval){ 
    this.getData = function(url, variable){ 
     $interval(function(){ 
      var deferred = $q.defer(); 
      $http.get(url) 
      .success(function(data){ 
       if (data){ 
        variable.value = data 
       } else { 
        deferred.reject('Wrong response'); 
       } 
      }) 
      .error(function(){ 
       deferred.reject(); 
      }); 
      return deferred.promise 
     },30000); 
    } 

}); 

и позвонить в службу из controller так:

.controller('displayCtrl', function($scope, config, eedisplayService){ 

    var url = "myUrl"; 

    $scope.test = {value : "" }; 

    eedisplayService.getData(url, $scope.test); 

}); 

Является ли это полный подход AngularJs? Код работает, но является хорошим выбором вызвать услугу с $interval от контроллера? Не лучше назвать его от config например?

Я проверил множество примеров, но я не совсем понимаю, что это лучший способ сделать это.

Большое спасибо.

С уважением

ответ

1

вы могли бы подумать о помещении $interval функциональности в контроллере, чтобы ваш сервис может быть более общим/многоразовым.

Также $http возвращает обещание на его собственной, так что вы не обязательно должны сделать это вручную:

// your service 
.service('eedisplayService', function($http){ 
    this.getData = function(url) { 
    return $http.get(url); 
    } 
}); 


// controller 
... 
$interval(function() { 
    eedisplayService.getData(...) 
    .then(function(response) { 
    // update the content in the view 
    }) 
}, 30000); 
+0

Большое спасибо за ответ! – Giordano

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