AngularJs $服务间隔

时间:2016-02-11 19:02:14

标签: javascript angularjs ajax

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

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

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 个答案:

答案 0 :(得分: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);