任何人都可以告诉我我可能做错了什么。我有这段代码:
var app = angular.module('app',
[
'angular-cache',
'angular-loading-bar',
'ngAnimate',
'ngCookies',
'pascalprecht.translate',
'ui.router',
'ui.bootstrap'
])
app.config([
'$httpProvider',
'$q',
($httpProvider,
$q) => {
$httpProvider.interceptors.push(
function () {
return {
'request': function (config) {
return config;
},
// optional method
'requestError': function (rejection) {
return $q.reject(rejection);
},
// optional method
'response': function (response) {
return response;
},
// optional method
'responseError': function (rejection) {
return $q.reject(rejection);
}
}
})
}])
当它运行时,我收到消息:
未捕获错误:[$ injector:modulerr]无法实例化模块应用 由于:错误:[$ injector:unpr]未知提供者:$ q http://errors.angularjs.org/1.5.0/ $注射器/ unpr?P0 =%24Q 在http://localhost:1828/lib/angular/angular.js:68:12 在http://localhost:1828/lib/angular/angular.js:4397:19 at getService(http://localhost:1828/lib/angular/angular.js:4550:39) at injectionArgs(http://localhost:1828/lib/angular/angular.js:4574:58) at Object.invoke(http://localhost:1828/lib/angular/angular.js:4596:18) at runInvokeQueue(http://localhost:1828/lib/angular/angular.js:4497:35) 在http://localhost:1828/lib/angular/angular.js:4506:11 at forEach(http://localhost:1828/lib/angular/angular.js:321:20) 在loadModules(http://localhost:1828/lib/angular/angular.js:4487:5) 在createInjector(http://localhost:1828/lib/angular/angular.js:4409:19) http://errors.angularjs.org/1.5.0/ $注射器/ modulerr P0 =应用&安培; P1 =错误%3A%20%...%20(HTTP%3A%2F%2Flocalhost%3A1828%2Flib%2Fangular%2Fangular.js%3A4409%3A19)
当我注释掉所有这些代码并运行我的应用程序时,它可以工作,我不会收到此错误消息。
答案 0 :(得分:4)
您可以将服务注入配置块。但是您可以使用函数的工厂服务作为拦截器。已有工厂示例,因此我将提供另一个功能解决方案:
app.config(['$httpProvider', ($httpProvider) => {
$httpProvider.interceptors.push(['$q', function($q) {
return {
'request': function(config) {
return config;
},
// optional method
'requestError': function(rejection) {
return $q.reject(rejection);
},
// optional method
'response': function(response) {
return response;
},
// optional method
'responseError': function(rejection) {
return $q.reject(rejection);
}
}
}])
}])
答案 1 :(得分:3)
您只能将提供程序注入配置块,因为它在加载任何服务之前运行。 $q
是一项服务,因此在该代码块运行时未定义。
答案 2 :(得分:1)
您不能将$httpProvider.interceptors
作为提供者注入。相反,在工厂中定义拦截器,然后将其推送到config
内的.config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push('testInterceptor');
}]);
。请注意以下内容......
.factory('testInterceptor', ['$q', function($q) {
return {
'request': function (config) {
return config;
},
'requestError': function (rejection) {
return $q.reject(rejection);
},
'response': function (response) {
return response;
},
'responseError': function (rejection) {
return $q.reject(rejection);
}
}
}]);
b
JSFiddle Link - 演示