为什么我不能将控制器注入控制器?

时间:2014-08-23 15:49:58

标签: angularjs angularjs-controller

我的应用程序有一个多标签订单向导。它有一个名为OrderController的Controller。我决定每个选项卡都有一个控制器,OrderController可以管理所有选项卡和导航。

OrderController包含一个标签信息的静态数组(标题,部分等)。我决定每个标签应该向OrderController提供自己的信息。

我创建了一个'tab 1'控制器和一个将Tab键信息返回给OrderController的函数。我将'tab 1'注入OrderController,但是由于'no provider'错误而失败了。我做了一些谷歌搜索,发现控制器可以通过各种方式与控制器通信。没有像我正在尝试那样直接注射。

我尝试了一个特定于标签的工厂。 (也许这不是一个坏主意,因为提供的信息是静态的。)这很好。

对不起啰嗦的帖子感到抱歉。

但是为什么我不能在技术上将一个控制器注入另一个控制器? Angularjs没有参与其中。从逻辑上讲,为什么这是一个坏主意?

1 个答案:

答案 0 :(得分:2)

因为控制器并不是真的存在。对于一组行为和变量,它们是OO等同于“模板”。它们在某些地方实际使用之前不会被创建。注入器只能为您提供全局存在的东西,而控制器不是全局的。

工厂(或者如果您不需要特殊的创建行为,服务是相同的,但写一点时间更短)就是这种模式。它是一个全局单例对象(任何时候都只存在一个实例),因此注入器可以找到它并将其提供给您。

这只是因为Angular没有注入“Controller 4”的模式。控制器可以随时拥有0..N个实例。怎么知道你想要哪一个?仅仅因为你不是计划拥有多个这个组件并不意味着你不能或其他人不会。这不是注射器的工作。