加载后的角度注射服务

时间:2016-03-03 18:53:23

标签: angularjs-scope

我写了一个通用控制器。

仅针对上下文,它不是问题的一部分:我通过在初始化期间设置回调函数来扩展控制器,然后控制器调用特定事件。因此,当我编写控制器(因为它是通用的)时,我不知道我可能需要哪些服务。

那么,在视图中实例化控制器(使用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

1 个答案:

答案 0 :(得分:0)

当Angular引导时,这分两个阶段完成:

  1. 配置阶段:注册所有服务/控制器等,调用配置块并初始化注入器。您只能在配置块中注入提供者和常量,因为提供者将返回的服务不是

  2. 运行阶段:执行所有运行块并执行控制器/指令等(从ng-app开始)。因此也可能会注入服务。

  3. 你想要的是不可能的。您唯一能做的就是在配置块中配置提供程序。配置确定服务在运行阶段注入时的外观。见https://docs.angularjs.org/guide/providers

    您能详细说明您实际想要解决的问题吗?拥有一个不知道注入什么的通用控制器听起来像一个糟糕的模式。它甚至不是“单元可测试的”。