2015-11-06 57 views
0

我面临以下问题的服务数据:

在我的AngularJS应用程序中,我有服务,包括数据和功能,这将刷新他们

angular.module('testService', ['ui.router']) 
.factory('testService', function($http) { 

    var service = {}; 

    var _baseUrl = 'http://127.0.0.1:8000/api/v1/test/'; 
    service.orders = {created: 0, approved: 0}; 

    /* 
    * get number of unprocessed orders 
    */ 

    service.updateNOrders = function(){ 
    var tableName = 'orders?stats=true'; 
    $http({ 
     method: 'GET', 
     url: _baseUrl + tableName, 
    }).success(function(data){ 
     service.orders = data; 
     console.log(data); 
     return; 
    }).error(function(err){ 
     alert(JSON.stringify(err)); 
     return; 
    }) 
    } 
}); 

我可以将此服务注入ie指令并调用函数updateNOrders来更新指令中的数据。

但是,我想要的服务是每n秒为服务调用此函数。

该服务是在几个指令共享,而不是每个指令,照顾更新数据,我希望服务自己做。

我已经试过comething像:

angular.module('testService', ['ui.router']) 
.factory('testService', function($http, $q, $rootScope, $interval) { 

    $interval(console.log('test'),1000); 

    /* 
    rest of the code 
    */ 


}); 

,但不起作用。

那么 - 是否可以每分钟拨打testService以内的功能updateNOrders

回答

0

创建具有副作用的服务是一个坏主意。最好使用通过回调设置间隔的方法来创建服务。然后你就可以在运行回调注入你的服务(运行调用回调仅一次):

angular.module('testService', ['ui.router']) 
 
.factory('testService', ['$interval', function($interval) { 
 

 
    var service = {}; 
 

 
    service.doPeriodicAjaxRequest = doPeriodicAjaxRequest; 
 

 
    function doPeriodicAjaxRequest() { 
 
    $interval(yourCode, ...); 
 
    } 
 

 
    return service; 
 

 
}]);

然后:

angular.module('', []) 
 
    .run(['testService', function (testService) { 
 
    testService.doPeriodicAjaxRequest(); 
 
    }]);

+0

这是伟大的。我添加了一些检查,所以这个函数不会多次调用,并且它工作得很完美 – Zbynek

0

为什么不在特定的时间间隔内从控制器调用服务功能。

$interval(testService.functionName,1000); 
+0

我不使用的控制器应用程序,只有指令 – Zbynek