我在 Angular 的指令中看到一个链接函数,如下所示:
link: function (scope, element, attrs, ctrls) {
var ngModelCtrl = ctrls[0],
invalidInputController = ctrls[1];
// ...
}
有人可以帮助我了解ctrl
参数中的控制器来自哪里吗?
编辑:该指令有一个角度require
属性,按名称指定另外两个指令,如下所示:
require: ['ngModel', '?numberFormatterPreventInvalidInput'],
我怀疑他们来自那里。
它们来自指令的require
部分,该部分是字符串或控制器数组。
['^something', '^another']
在link
内,它们可以通过ctrl[0]
和ctrl[1]
访问。
同样来自文档:
控制器和链接之间的基本区别在于控制器可以公开 API,并且链接 函数可以使用 require 与控制器交互。
最佳实践:当您想要向其他人公开 API 时使用控制器 指令。否则使用链接。
如果在你的指令中写了
require:["ngModel","^directiveTwo"]
比 ngModel ,指令二是指令的名称,指令二必须是父指令
link: function (scope, element, attrs, ctrls) {
var ngModelCtrl = ctrls[0],
controllerOfDirectiveTwo = ctrls[1];
// ...
}
ctrls 最后一个参数是 require 定义的指令的控制器数组,因此对于 ngModel 来说,这个 :https://docs.angularjs.org/api/ng/type/ngModel.NgModelController 对于控制器定义的指令:在您的指令中