2014-05-16 54 views
0

使用以下代碼,我的加載指示器似乎可以正常工作。但是,如果有人在瀏覽器中重新加載頁面,加載指示符不會消失。這不會發生在索引或根目錄上。使用console.log()我可以看到「加載完成」已被廣播,但該指令不會被更新。有任何想法嗎?當頁面重新加載時,angularjs加載指示器不會清除

我用我的angularjs配置如下代碼:

$httpProvider.interceptors.push(function($q, $rootScope) { 
    return { 
     'request': function(config) { 
      $rootScope.$broadcast('loading-started'); 
      return config || $q.when(config); 
     }, 
     'response': function(response) { 
      $rootScope.$broadcast('loading-complete'); 
      return response || $q.when(response); 
     } 
    }; 
}); 

加上以下指令:

.directive("loadingIndicator", function() { 
    return { 
     restrict : "A", 
     template: "<div>Loading...</div>", 
     link : function(scope, element, attrs) { 
      scope.$on("loading-started", function(e) { 
       element.css({"display" : "block"}); 
      }); 

      scope.$on("loading-complete", function(e) { 
       element.css({"display" : "none"}); 
      }); 
     } 
    }; 
}) 

最後,在HTML:

<div class="loading" loading-indicator></div> 
+0

而不是讓指令顯示/隱藏基於事件的加載指示器,爲什麼不把它綁定到某個狀態變量(可以保存在$ rootScope中)? – JoseM

+0

我忘記提及可能發生的情況是,當頁面上第一次繪製加載指示符時,它可能無法捕捉加載完成事件,這就是爲什麼我建議將它與狀態聯繫起來 – JoseM

+0

是否可以提供一個使用狀態變量的例子? –

回答

0

當Http請求失敗,攔截器的響應函數將不會被調用。嘗試添加'responseError'處理程序以及廣播該事件。

'responseError': function(rejection) { 
    $rootScope.$broadcast('loading-complete'); 
    if (canRecover(rejection)) { 
     return responseOrNewPromise 
    } 
    return $q.reject(rejection); 
    } 
+0

我已經嘗試過變體,包括responseError和requestError函數,但是我忽略了它們,因爲問題依然存在或不存在。 –

+1

默認情況下,css類「加載」是否設置爲「display:none」? –

+0

它不是。如果可以的話,我會接受這個答案。話雖如此,我想現在我有相反的問題。如果我重新加載頁面,加載指示符將不會顯示。在這兩種情況下,隨後在界面上單擊都會導致加載指示器正常工作。看起來廣播沒有被採取......太早了,也許?儘管如此,擁有CSS默認設置比不好。 –

相關問題