我正在使用ng-strict-di来发现依赖注入问题。当我试图拦截$ httpd时,我在Angular 1.6中遇到了一个奇怪的错误。我的代码是这样的:
app.config(['$httpProvider',
function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
$httpProvider.defaults.withCredentials = true;
var access_token = 'abc123';
$httpProvider.interceptors.push(function($q) {
return {
'request' : function(config) {
if(config.url.indexOf('htm', config.url.length - 3) === -1 && config.url.indexOf('html', config.url.length - 4) === -1) {
config.url = config.url + '?access_token=' + encodeURIComponent(access_token);
}
return config;
}
};
});
}]);
正在发生的错误是:
Uncaught Error: [$injector:strictdi] function($q) is not using explicit annotation and cannot be invoked in strict mode
http://errors.angularjs.org/1.6.1/$injector/strictdi?p0=function(%24q)
at angular-1.4.3.js:68
at Function.annotate [as $$annotate] (angular-1.4.3.js:4072)
at injectionArgs (angular-1.4.3.js:4799)
at Object.invoke (angular-1.4.3.js:4834)
at angular-1.4.3.js:11241
at forEach (angular-1.4.3.js:357)
at $HttpProvider.$get (angular-1.4.3.js:11239)
at Object.invoke (angular-1.4.3.js:4842)
at angular-1.4.3.js:4636
at getService (angular-1.4.3.js:4783)
根据我的理解,不应该定义$ q,因为定义了函数。为什么$ q导致错误以及如何解决这个问题?
答案 0 :(得分:1)
我认为你只需要像这样“声明”你对$ q的依赖:
app.config(['$httpProvider', '$q'
function($httpProvider, $q) {
$httpProvider.defaults.useXDomain = true;
有了这个,您就可以在配置中的任何地方使用$ q(在http拦截器中也是如此)