我正在尝试将控制器注入我的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
没有被注射?
答案 0 :(得分:4)
如AngularJS documentation on modules中所述:
运行块 - 在创建并使用注入器后执行 启动应用程序。 只有实例和常量可以 注入运行块。这是为了防止进一步的系统 在应用程序运行时配置。
在documentation for controllers中,它声明:
在Angular中,Controller是一个JavaScript 构造函数 用于增强角度范围。连接控制器时 DOM通过ng-controller指令,Angular将实例化一个 新的Controller对象,使用指定的Controller的构造函数 功能强>
控制器是实例构造函数,而不是实例本身,而不是服务。因此,根据我的收集,控制器不能注入运行块。
如果您需要在启动时配置控制器,请使用提供商。事实证明,在角度,控制器(以及指令,过滤器和动画)都是提供者的简单语法糖。可以使用配置块配置提供程序:configuration block documentation
配置块 - 在提供商注册期间执行 和配置阶段。只能注入提供者和常量 到配置块。这是为了防止意外实例化 服务完全配置之前的服务。