无法注入AuthenticationController

时间:2014-06-25 18:10:03

标签: javascript angularjs dependency-injection

我正在尝试将控制器注入我的app.run函数,但是我一直在这里:

Uncaught Error: [$injector:unpr] http://errors.angularjs.org/1.2.10/$injector/unpr?p0=AuthenticationControllerProvider%20%3C-%20AuthenticationController 

这是我的app.js

var app = angular.module('app', [
    'AuthenticationModule'
]);

app.run(['$rootScope', 'AuthenticationService', 'AuthenticationController',
    function($rootScope, AuthenticationService, AuthenticationController) {

        console.log(AuthenticationController);
    }
]);

AuthenticationService注射得很好。为什么AuthenticationController没有被注射?

1 个答案:

答案 0 :(得分:4)

AngularJS documentation on modules中所述:

  

运行块 - 在创建并使用注入器后执行   启动应用程序。 只有实例和常量可以   注入运行块。这是为了防止进一步的系统   在应用程序运行时配置。

documentation for controllers中,它声明:

  

在Angular中,Controller是一个JavaScript 构造函数   用于增强角度范围。连接控制器时   DOM通过ng-controller指令,Angular将实例化一个   新的Controller对象,使用指定的Controller的构造函数   功能

控制器是实例构造函数,而不是实例本身,而不是服务。因此,根据我的收集,控制器不能注入运行块。

如果您需要在启动时配置控制器,请使用提供商。事实证明,在角度,控制器(以及指令,过滤器和动画)都是提供者的简单语法糖。可以使用配置块配置提供程序:configuration block documentation

  

配置块 - 在提供商注册期间执行   和配置阶段。只能注入提供者和常量   到配置块。这是为了防止意外实例化   服务完全配置之前的服务。