簡體   English   中英

我可以將供應商注入工廠嗎?

[英]Can I inject provider into factory?

我想創建一個httpRequestInterceptor在應用程序的.config中使用。

$httpProvider.interceptors.push('httpRequestInterceptor');

我有此提供程序和RequestInterceptor的工廠:

angular.module('app.services', [])
.provider('appProvider', [function () {
    var apiUrl = "http://url/api";
    var _authToken = null;
    var _currentUser = null;

    this.$get = function($q, $http, $cookieStore) {
        var service = {
            getAuthToken: function() {
                return _authToken ? 
                    $cookieStore.get('authToken') ? 
                        (_authToken = $cookieStore.get('authToken'), _authToken) :
                        '' : _authToken;
            }
        };  

        return service
    }
}])
.factory('httpRequestInterceptor', [function () {
    return {
        request: function(config) {
            config.headers = {'auth-toke': appProvider.getAuthToken()}
            return config;
        }
    };
}]);

我收到錯誤消息:無法讀取未定義的屬性'getAuthToken'

如何解決這個問題?

注入appProvider:

.factory('httpRequestInterceptor', ['appProvider', function (appProvider) {
     return {
        request: function(config) {
            config.headers = {'auth-toke': appProvider.getAuthToken()}
            return config;
        }
    };
}]);

添加$ injector並使用它

.factory('httpRequestInterceptor', function ($injector) {
 return {
    request: function(config) {
        config.headers = {'auth-toke': $injector.get('appProvider').getAuthToken()}
        return config;
    }
  };
}]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM