AngularJS显式注释,不能在严格模式下调用

时间:2017-02-02 13:30:29

标签: angularjs

我正在使用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导致错误以及如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我认为你只需要像这样“声明”你对$ q的依赖:

app.config(['$httpProvider', '$q'
function($httpProvider, $q) {
    $httpProvider.defaults.useXDomain = true;

有了这个,您就可以在配置中的任何地方使用$ q(在http拦截器中也是如此)