2015-11-06 71 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