本文介绍了通过实施和httpInterceptor 1.1.5 AngularJS加载微调的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我发现一个装载微调针对HTTP的例子/资源调用这里SO:

I've found an example of a loading spinner for http/resource calls here on SO:


  • (Plunker变量:<一href=\"http://plnkr.co/edit/32Mh9UOS3Z4vnOtrH9aR?p=$p$pview\">http://plnkr.co/edit/32Mh9UOS3Z4vnOtrH9aR?p=$p$pview)

  • Set rootScope variable on httpIntercept (Plunker: http://plnkr.co/edit/32Mh9UOS3Z4vnOtrH9aR?p=preview)

正如你所看到的实施工作(使用AngularJS 1.0.5)。但是,如果您更改源AngularJS 1.1.5。该示例不工作了。

As you can see the implementation works (using AngularJS 1.0.5). However if you change the sources to AngularJS 1.1.5. The example does not work anymore.

我了解到, $ httpProvider.responseInterceptors 是1.1.5 pcated德$ P $。
相反,应该使用 $ httpProvider.interceptors

I learned that $httpProvider.responseInterceptors is deprecated in 1.1.5.Instead one should use $httpProvider.interceptors

不幸的是刚刚更换的Plunker上面的字符串并没有解决问题。有没有人做过使用HttpInterceptor这样的加载微调在AngularJS 1.1.5?

Unfortunately just replacing the above string in the Plunker did not solve the problem. Has anyone ever done such a loading spinner using HttpInterceptor in AngularJS 1.1.5?

感谢您的帮助!

迈克尔

推荐答案

感谢史蒂夫的暗示我能够实施装载机:

Thanks to Steve's hint I was able to implement the loader:

拦截器:

.factory('httpInterceptor', function ($q, $rootScope, $log) {

    var numLoadings = 0;

    return {
        request: function (config) {

            numLoadings++;

            // Show loader
            $rootScope.$broadcast("loader_show");
            return config || $q.when(config)

        },
        response: function (response) {

            if ((--numLoadings) === 0) {
                // Hide loader
                $rootScope.$broadcast("loader_hide");
            }

            return response || $q.when(response);

        },
        responseError: function (response) {

            if (!(--numLoadings)) {
                // Hide loader
                $rootScope.$broadcast("loader_hide");
            }

            return $q.reject(response);
        }
    };
})
.config(function ($httpProvider) {
    $httpProvider.interceptors.push('httpInterceptor');
});

指令:

.directive("loader", function ($rootScope) {
    return function ($scope, element, attrs) {
        $scope.$on("loader_show", function () {
            return element.show();
        });
        return $scope.$on("loader_hide", function () {
            return element.hide();
        });
    };
}
)

CSS:

#loaderDiv {
   position: fixed;
   top: 0;
   right: 0;
   bottom: 0;
   left: 0;
   z-index: 1100;
   background-color: white;
   opacity: .6;
}

.ajax-loader {
   position: absolute;
   left: 50%;
   top: 50%;
   margin-left: -32px; /* -1 * image width / 2 */
   margin-top: -32px; /* -1 * image height / 2 */
   display: block;
}

HTML:

<div id="loaderDiv" loader>
    <img src="src/assets/img/ajax_loader.gif" class="ajax-loader"/>
</div>

这篇关于通过实施和httpInterceptor 1.1.5 AngularJS加载微调的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-21 06:05