2017-04-27 153 views
0

我有一家工厂,它使用服务($ http call)存储和定期更新一些数据。每次数据更新时,我都希望视图中的繁忙指示符。工厂公开数据对象和承诺。cg-busy连续承诺

angular.module('myUI') 
    .factory('statusFactory', function ($timeout, statusService) { 
    var promise = {}; 
    var data = {}; 

    function update(){ 
     angular.extend(promise, statusService.status().$promise).then(function(response){ 
      angular.extend(data, response); 
     }); 
     $timeout(update, 10000); 
    } 
    update(); 

    return{ 
     data: data, 
     promise: promise 
    } 
}); 

在控制器中,我结合这些变量范围:

$scope.statusPromise = statusFactory.promise; 
    $scope.data = statusFactory.data; 

最后在视图我提出

<div cg-busy="statusPromise"> 
    {{data.var1}} 
    {{data.var2}} 
    ... 
</div> 

现在数据被完美地更新的数据,而是cg-busy什么都不做。每当$ http调用被解析时,我都会期待忙图标。当我直接在控制器中使用statusService时,它可以工作。

有没有更好的方法来做到这一点?我如何才能公开工厂的一些持久性承诺,以便在每次新呼叫时更新视图?

回答

0

我会尝试这样的事:

angular.module('myUI') 
    .factory('statusFactory', function ($timeout, statusService) { 
    var promise = {}; 
    var data = {}; 
    var busyIndicator = {busy: false}; 

    function update(){ 
     busyIndicator.busy = true; 
     angular.extend(promise, statusService.status().$promise).then(function(response){ 
      angular.extend(data, response); 
      busyIndicator.busy = false; 
     }); 
     $timeout(update, 10000); 
    } 
    update(); 

    return{ 
     data: data, 
     promise: promise 
    } 
}); 

将其绑定到$scope

$scope.busyIndicator= statusFactory.busyIndicator; 

然后将它绑定到cg-busy(我相信它需要truefalse):

<div cg-busy="busyIndicator.busy"> 
    {{data.var1}} 
    {{data.var2}} 
    ... 
</div> 

busy需要用在busyIndicator里面的对象,分享工厂和视图之间的一个参考。此外,请检查cg-busy是否正常工作,并且硬编码为true值。

+0

谢谢!这工作。 – NeplatnyUdaj

+0

不起作用 – alecellis1985