AngularJs $interval on service

AngularJs $interval on service

本文关键字:service on interval AngularJs      更新时间:2023-09-26

我是Angularjs的初学者,所以我想问你是否有更好的方法来解决我的问题。

例如,我需要每 30 秒更新一次带有 ajax 调用的<div>的内容。

.HTML

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

我的想法是在service上使用$interval,如下所示:

.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中调用它不是更好吗?

我查看了很多示例,但我真的不明白这样做的最佳方法是什么。

非常感谢。

问候

您可以

考虑将$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);