【问题标题】:Can't add "$localStorage"无法添加“$localStorage”
【发布时间】:2017-10-24 15:14:49
【问题描述】:

我在 app.js 中开发方法,但出现此错误:未捕获的错误:
[$injector:strictdi] function($rootScope, $q, $localStorage, $location) 没有使用显式注解,不能在严格模式下调用 http://errors.angularjs.org/1.6.6/$injector/strictdi?p0=function(%24rootScope%2C%20%24q%2C%20%24localStorage%2C%20%24location)

angular.module('ppollitApp', [ngCookies, ngResource, ngSanitize, 'btford.socket-io', uiRouter,
      uiBootstrap, _Auth, account, admin, navbar, footer, main, constants, socket, util, profile, explore
    ])
      .config(routeConfig)
      .factory('authInterceptor', function($rootScope, $q, $localStorage, $location) {
        return {
          // Add authorization token to headers
          request: function(config) {
            config.headers = config.headers || {};
            if($localStorage.token) {
              config.headers.Authorization = 'Bearer ' + $localStorage.token;
            }
            return config;
          },

          // Intercept 401s and redirect you to login
          responseError: function(response) {
            if(response.status === 401) {
              $location.path('/login');
              // remove any stale tokens
              delete $localStorage.token;
              return $q.reject(response);
            } else {
              return $q.reject(response);
            }
          }
        };
      })

      .run(function($rootScope, $location, Auth) {
        'ngInject';
        // Redirect to login if route requires auth and you're not logged in

        $rootScope.$on('$stateChangeStart', function(event, next) {
          Auth.isLoggedIn(function(loggedIn) {
            if(next.authenticate && !loggedIn) {
              $location.path('/login');
            }
          });
        });
      });

    angular.element(document)
      .ready(() => {
        angular.bootstrap(document, ['ppollitApp'], {
          strictDi: true
        });
      });

    var module = angular.module('main', ['ppollitApp', 'ppollitApp.services']);

    module.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
      $routeProvider.when('/', { templateUrl: '/login/login.html', controller: 'LoginController'});

      $locationProvider.html5Mode(true);
    }]);

【问题讨论】:

    标签: javascript angularjs node.js


    【解决方案1】:

    错误的意思就是它所说的,使用DI的所述函数没有使用显式注释,并且不能在严格模式下调用。

    The page that the error links to 包含所有必要的信息。

    考虑到ng-annotate已经用于DI注解,应该是:

      ...
      .factory('authInterceptor', function($rootScope, $q, $localStorage, $location) {
        'ngInject';
        ...
    

    【讨论】:

    • 几乎同样的问题,现在我有这个错误:未捕获错误:[$injector:unpr] 未知提供者:$localStorageProvider
    • 不,不一样。这些问题之间唯一的共同点是这是喷油器错误。这可能是因为ngStorage 模块既没有被加载到 ppollitApp 模块中,也没有被加载到任何嵌套模块中——而它应该被加载。
    • 但是,当添加 ngStorage 时,我有这个错误:未捕获错误:[$injector:modulerr] 无法实例化模块 ppollitApp 由于:错误:[$injector:modulerr] 无法实例化模块 {" _invokeQueue":[["$provide","provider",{"0":"$localStorage"}],["$provide","provider",{"0":"$sessionStorage"}]]," _configBlocks":[],"_runBlocks":[],"requires":[],"name":"ngStorage"} 由于:错误:[ng:areq] 参数“模块”不是函数,得到 Object
    • 很可能是以错误的方式导入的。您在出乎意料的地方提供了对象。错误会自行解释并显示出现问题的对象。您需要提供模块 name 作为依赖项,而不是模块对象。
    【解决方案2】:

    改变你的工厂:

    angular.factory('authInterceptor', function($rootScope, $q, $localStorage, $location) { /* ... */ }
    

    收件人:

    authInterceptor.$inject = ['$rootScope', '$q', '$localStorage', '$location'];
    angular.factory('authInterceptor', authInterceptor);
    function authInterceptor($rootScope, $q, $localStorage, $location) { /* ... */ }
    

    【讨论】:

    • 同样的问题:(
    猜你喜欢
    • 1970-01-01
    • 2018-03-24
    • 2020-01-07
    • 2020-03-21
    • 2023-02-25
    • 2018-07-14
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多