我在Angular的指令中看到了一个链接函数,如下所示:
link: function (scope, element, attrs, ctrls) {
var ngModelCtrl = ctrls[0],
invalidInputController = ctrls[1];
// ...
}
有人可以帮我理解ctrl
参数中控制器的来源吗?
编辑:该指令有一个角度require
属性,按名称指定另外两个指令:
require: ['ngModel', '?numberFormatterPreventInvalidInput'],
我怀疑他们是从那里来的。
答案 0 :(得分:6)
通常它们来自指令的require
部分,该指令是字符串或控制器数组。
['^something', '^another']
在link
ctrl[0]
内,ctrl[1]
和{{1}}可以访问它们。
同样来自文档:
基本区别(控制器和链接之间)是控制器可以公开API,并链接 函数可以使用require 与控制器交互。
最佳实践:当您要将API公开给其他人时,请使用控制器 指令。否则使用链接。
答案 1 :(得分:1)
如果在你的指令中写的
require:["ngModel","^directiveTwo"]
比ngModel,directiveTwo是指令的名称,而directiveTwo必须是父指令
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用于控制器定义的指令:在你的指令中