我写了一个通用控制器。
仅针对上下文,它不是问题的一部分:我通过在初始化期间设置回调函数来扩展控制器,然后控制器调用特定事件。因此,当我编写控制器(因为它是通用的)时,我不知道我可能需要哪些服务。
那么,在视图中实例化控制器(使用ngController)后,我怎样才能注入服务。显然,我将有一个名为myApp的变量,以及myApp.controller(...)的结果。
一旦注入,我就会在调用回调函数时引用范围。我还可以添加参数以在必要时传递其他内容。如何访问服务?
谢谢
示例代码:
// Html:
ng-init="controller.init('myExtension')"
// then in the generic/abstract controller:
this.init=function(extensionName){
window["extend_"+tag]($scope, this);
}
.... later on .....
this.callBackFunction($scope)
// and finally (in a separate js file that is project specific):
function extend_myExtension(scope, controller){
controller.callBackFunction=function(scope){
// this is where I would like to use the service
}
}
// this is where I would like to inject a service that
// I didn't know about when I wrote the generic/abstract controller
答案 0 :(得分:0)
当Angular引导时,这分两个阶段完成:
配置阶段:注册所有服务/控制器等,调用配置块并初始化注入器。您只能在配置块中注入提供者和常量,因为提供者将返回的服务不是
运行阶段:执行所有运行块并执行控制器/指令等(从ng-app开始)。因此也可能会注入服务。
你想要的是不可能的。您唯一能做的就是在配置块中配置提供程序。配置确定服务在运行阶段注入时的外观。见https://docs.angularjs.org/guide/providers
您能详细说明您实际想要解决的问题吗?拥有一个不知道注入什么的通用控制器听起来像一个糟糕的模式。它甚至不是“单元可测试的”。