【问题标题】:Typescript spinner directive打字稿微调指令
【发布时间】:2016-01-04 21:10:20
【问题描述】:

我正在尝试使用 TYPESCRIPT 实现某种类型的 angularjs 指令,该指令将使用布尔参数“isShow”包装每个 $http get 请求,该参数将监视请求的状态并更新参数并相应地显示/隐藏 html 元素(不使用 $scope 或 $watch。) 知道如何实现这一目标吗? 谢谢

【问题讨论】:

    标签: angularjs typescript promise directive


    【解决方案1】:

    使用promise disposer pattern

    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 表示显示它)。

    【讨论】:

    • 这是一个很好的答案 benji
    • @phenomnomnominal 感谢克雷格,我在写这篇文章时正在想你。从那时起每隔一分钟。
    • 本杰明,我是否需要某种手表让应用程序识别 spinnerSemaphore 的值已更改?
    • @Basilf 不,不需要做奇怪的$apply 东西,角度承诺已经为你处理好了,你只需要绑定到spinnerSemaphore,它将为你定义一个观察者。
    • 我明白了,只是 ng-show 的值由于某种原因没有更新......嗯......
    【解决方案2】:

    如果您正在寻找一个单一的微调器,您可以通过将其ng-show(或等效的)绑定到$http.pendingRequests.length 来轻松做到这一点。当然,这假设您在范围内有$http(或$rootScope)。

    【讨论】:

    • barasat 我根本不在我的应用程序中使用范围/根范围。那是我的问题
    • 然后放到根控制器上,像rootCtrl.$http一样使用;)
    猜你喜欢
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 2015-07-19
    • 1970-01-01
    • 2015-12-07
    • 2018-11-10
    • 2023-03-04
    相关资源
    最近更新 更多