Angular函数不使用显式注释,不能在严格模式下调用

时间:2016-04-17 14:03:13

标签: angularjs angularjs-injector

在我的网络应用程序中,我想验证用户是否有权继续。

这是我的index.js文件中的.run方法:

  .run(function (event, toState, toParams, fromState, $window) {
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, $window) {
  if (Auth.isLoggedIn && $window.localStorage.identityToken) {

    var requiredAdmin = toState.data.requiredAdmin; 
    if (requiredAdmin && $window.localStorage.isAdmin){
      $state.go(toState.name);
    } else {
      $state.go(fromState.name);
    }
    var shouldGoToMain = fromState.name === 'login' && toState.name !== 'app.dashboard' ;

    if (shouldGoToMain){
      $state.go('app.dashboard');
      event.preventDefault();
    } else {
      $state.go(toState.name);
    }
    return;
  } else { 
    $state.go('login');
    return;
  }

  // unmanaged
});

});

控制台错误是:Uncaught Error: [$injector:strictdi] function(event, toState, toParams, fromState, $window) is not using explicit annotation and cannot be invoked in strict mode

1 个答案:

答案 0 :(得分:2)

您已启用strict mode,以便检测您忘记使用$ inject或数组表示法的位置,以确保您的代码可以安全缩小。

该消息告诉您未能正确注释可注射功能。请注意,除此之外,您的代码没有多大意义:

  • 传递给run()的函数应该将可注入服务作为参数,除$ window之外的所有参数都不是服务。
  • 传递给$ on()的函数不是可注入函数。所以传递它$ windows是没有意义的。路由器只会使用4个第一个参数调用它。

所以,你的代码应该是:

.run(['$rootScope', '$window', function($rootScope, $window) {
    $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState) { 

我强烈建议您手动停止注射您的注射功能,并使用ng-annotate为您做这件事。