我创建了一个配置服务来提供特定于环境的配置。我正在使用$httpProvider
拦截并使用API Base Url扩展请求网址,但如何从$httpProvider
内访问配置服务?
我已经阅读了$injector
,但我不明白如何使用它来解决我的问题。
// pseudo code, not working
app.service('Config', function() {
// configuration property object
return {
get: function (property) {
return property
}
}
});
app.config(function ($httpProvider, Config) {
$httpProvider.interceptors.push(function ($q) {
return {
'request': function (config) {
// extend config.url to add a base url to the request
if (config.url.indexOf('api') !== -1) {
config.url = Config.get('root') + config.url;
}
return config || $q.when(config);
}
}
});
});
答案 0 :(得分:3)
更改此行:
app.config(function($httpProvider, Config) {
为:
app.config(function($httpProvider) {
和这一行:
$httpProvider.interceptors.push(function($q) {
为:
$httpProvider.interceptors.push(function($q, Config) {
这是有效的,因为你推送到拦截器的函数本质上是一个角度服务,可以像这样定义:
angular.app('app', [])
.service('HttpInterceptor', function($q, Config) {
return {
request: function() {
// Do whatever
}
};
});
可以在config
函数中传递,如下所示:
$httpProvider.interceptors.push('HttpInterceptor');
只要你的HttpInterceptor服务没有调用$http
或依赖$http
的任何东西(......如$resource
),你就可以了。 @Ye Liu在评论中表示不允许将服务注入配置功能。但是,服务可以注入其他服务。