Angularjs 角度指令中的依赖注入

Angularjs 角度指令中的依赖注入,angularjs,controller,angularjs-directive,annotations,dependencies,Angularjs,Controller,Angularjs Directive,Annotations,Dependencies,为什么通过require在指令中注入控制器,而通过数组注释注入其他依赖项?需要控制器 如果要共享同一控制器实例,请使用require require确保存在另一个指令,然后将其控制器作为参数包含到link函数中。因此,如果您在一个元素上有两个指令,那么您的指令可以要求另一个指令的存在,并获得对其控制器方法的访问权。这方面的一个常见用例是需要ngModel ^require,在添加插入符号后,除了当前元素外,还会检查指令上方的元素,以尝试查找其他指令。这允许您创建复杂的组件,其中“子组件”可以通过

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

需要控制器

如果要共享同一控制器实例,请使用
require

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

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

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

承蒙

关于数组注释的原因,请看一下这些内容


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


另一种说法是,对于require,您不是要求传递、实例化或创建某些内容,您只是说“我希望它存在于此元素上……顺便说一下,我可以在link函数中访问它,因为我知道它存在。”

NM,我现在明白这个问题了。thx也许你也可以看看这个?通过注入某些东西,它也可以在链接函数中访问,对吗?是的,第四个参数将是一个控制器或控制器数组,这是令人困惑的,因为它与DI使用的机制相同,但本质上仍然不是“注入”。