2016-01-14 104 views
1

我有一個攔截器,我正在配置以加載ajax微調器。

interface IInterceptorScope extends angular.IRootScopeService { 
     loading: number; 
    } 

    export class Interceptor { 

     public static Factory($q: angular.IQService, $rootScope : IInterceptorScope) { 
      return new Interceptor($q, $rootScope); 
     } 


     constructor(private $q: angular.IQService, private $rootScope: IInterceptorScope) { 
      this.$rootScope.loading = 0; 
     } 


     public response(response) { 
      console.log(response); 
      this.$rootScope.loading = 1; 
      return response || this.$q.when(response); 
     } 

     public responseError(rejection) { 
      console.log(rejection.status); 
      if (rejection.status === 401) { 
      } 

      return this.$q.reject(rejection); 
     } 
    } 

我收到此錯誤:

enter image description here

$q也沒有定義。我不知道爲什麼。任何人都可以幫忙嗎?

編輯:這是我如何加入我的config()塊內的攔截器,再減去其他參數,它看起來像這樣:

.config($httpProvider : angular.IHttpProvider) => { 
    $httpProvider.interceptors.push(Interceptor.Factory); 
} 

和註冊工廠:

.factory('Interceptor', Interceptor) 

作爲參考,我在這裏看第一個答案:

AngularJS global $http state ajax loader

$rootScope在這裏有加載屬性,但這是在純JavaScript中,所以我不知道它是否與TypeScript的方式在這裏。

+0

你沒有收到responseError裏面的錯誤,因爲可能你的代碼沒有打到該塊 – gaurav5430

+0

請說明你如何註冊攔截器? – miensol

+0

嗨,我剛剛重新編輯了我的答案。 – Thomas

回答

6

角度調用response方法沒有設置this;以打字稿來處理這個問題,使用功能屬性來捕捉this,如:

public response = (response) => { 
    console.log(response); 
    this.$rootScope.loading = 1; 
    return response || this.$q.when(response); 
} 

同爲responseError爲好。

+0

就是這樣。非常感謝你!請問這是否僅適用於http攔截器方法,還是在其他情況下會發生? – Thomas

+1

@Thomas - 當你的方法被用作回調時,這很常見,儘管它依賴於調用代碼。在Angular中有幾個地方會碰到它 - 例如,指令鏈接函數。 –

+0

非常好,非常感謝,救了我! – Ric