我正在尝试制作autenticate-interseptor。核心思想很简单:当服务器请求失败时,我们必须通过http-auth登录用户。代码如下所示:
(function() {
'use strict';
angular
.module('app.authentication')
.factory('AuthenticationInterceptor', ['$q', '$injector', '$location', 'Session',
function AuthenticationInterceptor($location, $q, $injector, Session) {
return {
request: function(config) {
var currentUser = Session.currentUser();
if (!currentUser || !currentUser.id) {
if ($location.path() !== '/login') { $location.path('/login'); }
}
return config;
},
responseError: function(response) {
if (response.status === 401 || response.status === 403) {
var $http = $injector.get('$http');
Session.destroy();
$location.path('/login');
}
return $q.reject(response);
}
};
}
]);
})();
由于圆圈注射错误,我需要此var $http = $injector.get('$http');
。但是当我使用该模块时,我收到错误TypeError: $injector.get is not a function
那么,我怎么能在这里注入$ http?
答案 0 :(得分:3)
您的注射顺序与数组中的字符串不匹配。
angular
.module('app.authentication')
.factory('AuthenticationInterceptor', ['$q', '$injector', '$location', 'Session',
function AuthenticationInterceptor($location, $q, $injector, Session) {
你正在告诉angular注入$ location服务作为AuthenticationInterceptor
服务的第三个参数,但你正在使用第三个参数,好像它是$ injector。将您的代码更改为以下内容:
angular
.module('app.authentication')
.factory('AuthenticationInterceptor', ['$location', '$q', '$injector', 'Session',
function AuthenticationInterceptor($location, $q, $injector, Session) {
答案 1 :(得分:0)
'$q', '$injector', '$location', 'Session'
$location, $q, $injector, Session
你没有尊重同一个订单。
帮自己一个忙,并使用ng-annotate再也不会有这个bug。