如何在配置应用程序路由时注释内联控制器中的依赖项?

时间:2016-06-06 11:50:58

标签: javascript angularjs dependency-injection annotations

如果我没有为路线的内联控制器功能注释依赖关系,我会收到跟踪错误(我使用严格的DI模式,所有其他代码都被注释,以便js-minification并没有破坏我的代码):

https://docs.angularjs.org/error/ $注射器/ strictdi?P0 =函数(AuthService,%20 $状态

这是注销路线代码:

app.config(['$stateProvider', '$urlRouterProvider', function($stateProvider', '$urlRouterProvider) {

  $stateProvider.state('logout', {
     url: '/logout',
     controller: function(AuthService, $state) {        
       AuthService.logout();
       $state.go('login');
     }
  }

}]);

是否有任何技术可以为内联控制器的上述两个相关服务(AuthService,$ state)声明内联注释?

我知道吼叫的解决方法:

.state('logout', {
    url: '/logout',
    controller: LogoutController
});


function LogoutController (AuthService, $state) {        
    AuthService.logout();
    $state.go('login');
}
LogoutController.$inject = ['AuthService', '$state'];

这可行,但只是想结账,是否有人知道任何聪明的捷径?

2 个答案:

答案 0 :(得分:1)

尝试

app.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {
  $stateProvider.state('logout', {
     url: '/logout',
     controller: ['AuthService', '$state', function(AuthService, $state) {        
       AuthService.logout();
       $state.go('login');
     }]
  }
}]);

不确定这是否有效。通常我们将控制器分成文件以便于使用,而不是将它们内联在config.route.js文件中。

答案 1 :(得分:1)

只是为了在这里添加更多细节,这对于内联控制器是可取的。

请参阅https://github.com/olov/ng-annotate/issues/50

要么不内联它们,要么添加申请controller: /* @ngInject */ function(service1){ ... }

/ * @ngInject * /告诉ngannotate在这里应用注释。