1. ホーム
  2. angularjs

[解決済み] AngularJSで$httpリクエスト中にスピナーGIFを表示する?

2022-01-25 11:38:52

質問

を使用しています。 $http サービスを使用して、Ajax リクエストを行います。

Ajaxリクエストの実行中にスピナーGIF(または他のタイプのビジーインジケータ)を表示するにはどうすればよいですか?

のようなものは見当たりません。 ajaxstartevent をAngularJSのドキュメントに追加しました。

どのように解決するのですか?

以下は 現在 過去のAngularJSの呪文。

angular.module('SharedServices', [])
    .config(function ($httpProvider) {
        $httpProvider.responseInterceptors.push('myHttpInterceptor');
        var spinnerFunction = function (data, headersGetter) {
            // todo start the spinner here
            //alert('start spinner');
            $('#mydiv').show();
            return data;
        };
        $httpProvider.defaults.transformRequest.push(spinnerFunction);
    })
// register the interceptor as a service, intercepts ALL angular ajax http calls
    .factory('myHttpInterceptor', function ($q, $window) {
        return function (promise) {
            return promise.then(function (response) {
                // do something on success
                // todo hide the spinner
                //alert('stop spinner');
                $('#mydiv').hide();
                return response;

            }, function (response) {
                // do something on error
                // todo hide the spinner
                //alert('stop spinner');
                $('#mydiv').hide();
                return $q.reject(response);
            });
        };
    });

//regular angular initialization continued below....
angular.module('myApp', [ 'myApp.directives', 'SharedServices']).
//.......

以下は、その続き(HTML / CSS)です...使用しています。

$('#mydiv').show(); 
$('#mydiv').hide(); 

でトグルします。 注:上記は、記事冒頭のangularモジュールで使用されている

#mydiv {  
    position:absolute;
    top:0;
    left:0;
    width:100%;
    height:100%;
    z-index:1000;
    background-color:grey;
    opacity: .8;
 }

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

<div id="mydiv">
    <img src="lib/jQuery/images/ajax-loader.gif" class="ajax-loader"/>
</div>