【问题标题】:Dependency injection in Angular DirectiveAngular 指令中的依赖注入
【发布时间】:2014-11-21 01:52:34
【问题描述】:

为什么在指令中注入控制器是通过require 完成的,而其他依赖项是通过数组注解完成的?

【问题讨论】:

  • NM,我现在明白这个问题了。

标签: angularjs controller angularjs-directive annotations dependencies


【解决方案1】:

需要控制器

如果您想共享同一个控制器实例,则使用require

require 确保存在另一个指令,然后将其控制器作为参数包含在链接函数中。因此,如果您在一个元素上有两个指令,则您的指令可以要求存在另一个指令并获得对其控制器方法的访问权限。一个常见的用例是需要 ngModel。

^require,添加插入符号后,除了当前元素之外,还会检查指令上方的元素,以尝试找到另一个指令。这使您可以创建复杂的组件,其中“子组件”可以通过其控制器与父组件进行通信以达到很好的效果。示例可能包括选项卡,其中每个窗格都可以与整个选项卡通信以处理切换;手风琴套装可以确保一次只打开一个;等等

在任何一种情况下,您都必须同时使用这两个指令才能使其工作。 require 是组件之间的一种通信方式。

感谢Josh David Miller

How to require a controller in an angularjs directive

由于数组注释的原因,看看这些东西

Why is the function in angular's DI inline annotation a array element?

【讨论】:

【解决方案2】:

控制器永远不会真正注入到其他东西中。当您使用 require 时,您只是获得了对父元素或当前元素上的其他控制器的访问权限。这些“其他指令”必须单独存在于同一元素或父元素上,因此名称为“require”。

另一种说法是,使用 require 你不是要求传递、实例化或创建某些东西,你只是说“我希望它存在于这个元素上......因为我知道它存在,所以我可以在链接函数中访问它。”

【讨论】:

  • 通过注入一些东西,它也可以在链接功能中访问,对吧?
  • 是的,第 4 个参数将是一个控制器或控制器数组,这令人困惑,因为它与 DI 使用的机制相同,但本身仍不是“注入”。
猜你喜欢
  • 2015-08-28
  • 2016-09-14
  • 2014-12-04
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 2016-02-15
  • 1970-01-01
相关资源
最近更新 更多