2016-09-30 19 views
0

我正在使用angularcript 1.5與typescript,並且我想創建一個攔截器來在自定義頭中插入令牌,並且還從每個響應中更新它。在嚴格模式下Angular Typescript依賴注入顯式註解錯誤

在運行時,我得到下面的異常:

Uncaught Error: [$injector:strictdi] function($q) is not using explicit annotation and cannot be invoked in strict mode

class AuthInterceptor implements ng.IHttpInterceptor { 

    $q:ng.IQService; 

    static $inject = ['$q']; 
    constructor($q:ng.IQService) { 
    this.$q = $q; 
    } 

    static factory($q:ng.IQService):AuthInterceptor { 
    return new AuthInterceptor($q); 
    } 


    request = (config:ng.IRequestConfig):ng.IRequestConfig => { 
    // config.headers = config.headers || {}; 
    console.info('Request config md', config); 
    // config.headers['token'] = 'test token'; 

    return config; 
}; 

    response = <T>(response: ng.IHttpPromiseCallbackArg<T>):ng.IPromise<T> => { 
    console.info('Response:', response); 

// modify response 

    return this.$q.when(response); 
}; 

}

let httpConfig = ($httpProvider:ng.IHttpProvider) => { 
    $httpProvider.interceptors.push(AuthInterceptor.factory); 
}; 

angular.module('app').config(httpConfig); 

你有什麼想法,我怎麼能解決這個問題?

在此先感謝。

回答

0

請試試這個。這是每個請求最簡單的攔截器

app.factory('myInterceptor', function() { 
     var requestInterceptor = { 
      request: function(config) { 
       return config; 
      } 
     }; 
     return requestInterceptor; 
    }); 

    app.config(['$httpProvider', function($httpProvider) { 
     $httpProvider.interceptors.push('myInterceptor'); 
    }]); 
+0

感謝您的回覆。但是,我需要$ q來進行響應攔截。另外我需要使用打字稿。 – Jhankar

+0

@Jhankar你也可以使用$ q也有 –

+0

如果我使用$ q作爲依賴注入,由於使用嚴格模式,我得到了上述錯誤。 – Jhankar