1. 程式人生 > >用angular $httpProvider做路由載入遮罩層

用angular $httpProvider做路由載入遮罩層

$httpProvider是一個路由攔截器

攔截器允許有一下四個操作:
1、 請求的攔截:request
這個方法的呼叫在$http請求之前
所以在此之前我們可以修改配置和進行其他操作!
2、 攔截響應:response
當$http服務收到後臺給出響應的時候,這個方法被呼叫。所以我們可以修改請求響應。這個方法接受一個響應物件作為引數。響應物件包含請求配置、標題、狀態以及從後臺返回的資料。如果返回的是一個無效的物件或者是promise,這個是不會呼叫的。
3、 攔截請求錯誤:requestError
4、 攔截響應錯誤:responseError

-----------------------------------以上解析來源網路-----------------------------------

既然我們知道了$httpProvider有這個功能,那麼我們就可以根據這個做遮罩層了。可以做到類似服務端請求進度條的效果。

廢話不多說。上圖 現在有一個這樣的東西。我點選提交訂單。但是當網路慢的時候,點選提交訂單,不會立即有反應,然後,我們習慣性的多點幾次,但是在程式中,點多少次,資料就請求多少次。這是不合理的,所以我們用$httpProvider做遮罩層。

根據$httpProvider的API(https://docs.angularjs.org/api/ng/service/$http#interceptors),我們知道

$httpProvider.interceptors.push(function($q, dependency1, dependency2) {
  return {
   'request': function(config) {
       // same as above
    },

    'response': function(response) {
       // same as above
    }
  };
});
那麼,我們就可以在這裡做手腳了。

首先,我們在發生請求的前面做個攔截

加上遮罩層,就是在‘request’加上$("body").append("<div>這裡是個遮罩層</div>")

然後在請求完成後'response'把這個<div>這裡是個遮罩層</div>.remove();

完成~