2017-02-02 3 views
0

Ich verwende ng-strict-di, um Abhängigkeitsinjektionsprobleme aufzudecken. Ich bekomme einen etwas komischen Fehler in Angular 1.6, wenn ich versuche, den $ httpd abzufangen. Mein Code ist dies:AngularJS explizite Annotation und kann nicht im strikten Modus aufgerufen werden

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; 
      } 
     }; 
    }); 
}]); 

Der Fehler, was geschieht, ist dies:

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) 

Von meinem Verständnis, $ q sollte nicht festgelegt werden müssen, weil die Funktion definiert ist. Warum verursacht das $ q einen Fehler und wie kann man das beheben?

Antwort

1

Ich glaube, Sie müssen nur Ihre Abhängigkeit mit $ q wie dieses „erklären“:

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

Damit erhalten Sie $ q überall in Ihrem config (und so in Ihrem http Interceptor verwenden können)

Verwandte Themen