【发布时间】:2016-01-04 21:10:20
【问题描述】:
我正在尝试使用 TYPESCRIPT 实现某种类型的 angularjs 指令,该指令将使用布尔参数“isShow”包装每个 $http get 请求,该参数将监视请求的状态并更新参数并相应地显示/隐藏 html 元素(不使用 $scope 或 $watch。) 知道如何实现这一目标吗? 谢谢
【问题讨论】:
标签: angularjs typescript promise directive
我正在尝试使用 TYPESCRIPT 实现某种类型的 angularjs 指令,该指令将使用布尔参数“isShow”包装每个 $http get 请求,该参数将监视请求的状态并更新参数并相应地显示/隐藏 html 元素(不使用 $scope 或 $watch。) 知道如何实现这一目标吗? 谢谢
【问题讨论】:
标签: angularjs typescript promise directive
var spinnerSemaphore = 0;
function own(fn){
spinnerSemaphore++;
var res = $q.when(fn());
fn().then(function(){ spinnerSemaphore--; },
function(){ spinnerSemaphore--; });
return res;
}
这会让你做什么:
own(function(){
return $http.get(...);
});
own(function(){
return $http.get(...);
});
own(function(){
return $http.get(...);
});
own(function(){
return $timeout(...); // this also works, and anything else with promises
});
并将显示微调器绑定到spinnerSemaphore(因此错误的 0 表示隐藏微调器,大于 0 表示显示它)。
【讨论】:
$apply 东西,角度承诺已经为你处理好了,你只需要绑定到spinnerSemaphore,它将为你定义一个观察者。
如果您正在寻找一个单一的微调器,您可以通过将其ng-show(或等效的)绑定到$http.pendingRequests.length 来轻松做到这一点。当然,这假设您在范围内有$http(或$rootScope)。
【讨论】:
rootCtrl.$http一样使用;)