$ injector.get不是函数

时间:2017-03-01 20:26:38

标签: angularjs

我正在尝试制作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?

2 个答案:

答案 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。