Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何显示XHR请求的加载图标?_Javascript_Angularjs - Fatal编程技术网

Javascript 如何显示XHR请求的加载图标?

Javascript 如何显示XHR请求的加载图标?,javascript,angularjs,Javascript,Angularjs,我有一个加载图像,它显示在$routeChangeStart上,并在路线更改后隐藏。我试图找到类似这样的东西,可以与xhrStart和xhrSuccess一起使用 $rootScope.$on('$routeChangeStart', function(){ $rootScope.loading = true; }); $rootScope.$on('$routeChangeSuccess', function(){ $rootScope

我有一个加载图像,它显示在
$routeChangeStart
上,并在路线更改后隐藏。我试图找到类似这样的东西,可以与xhrStart和xhrSuccess一起使用

    $rootScope.$on('$routeChangeStart', function(){
        $rootScope.loading = true;
    });

    $rootScope.$on('$routeChangeSuccess', function(){
        $rootScope.loading = false;
    });
我知道我能做到:

$rootScope.loading = true;
$http.get('/api/customers').success(function(data) {
   $rootScope.loading = false;
   ...
但这会变得单调乏味


angularJS中是否存在可用于显示/隐藏加载图像的XHR事件?

如果加载图形是全局的,则可以使用
httpInterceptor解决此问题。这是一个简单的拦截器实现,可以切换
$rootScope.loading

angular.module('myModule').factory('LoadingInterceptor', function ($rootScope) {

        $rootScope.loading = false;

        return {
            request: function (config) {
                $rootScope.loading = true;
                return config;
            },
            response: function (response) {
                $rootScope.loading = false;
                return response;
            }
        };
    })
    .config(function ($httpProvider) {
        $httpProvider.interceptors.push('LoadingInterceptor');
    });

注意:这种幼稚的实现可能会遇到问题。例如,您可能有并行XHR调用(此实现将导致加载程序闪存)。这是因为当第一次调用响应发生时,
$rootScope.loading
被设置回
false
(即使第二次调用仍在进行中)。

如果加载图形是全局的,您可以使用
httpInterceptor
进行此操作。该图形在
$rootScope
上是全局的。我现在正在看文档。非常感谢。