AngularJS指令参数“ctrls”

时间:2015-01-28 18:55:00

标签: javascript angularjs

我在Angular的指令中看到了一个链接函数,如下所示:

link: function (scope, element, attrs, ctrls) {

  var ngModelCtrl = ctrls[0],
      invalidInputController = ctrls[1];

  // ...
}

有人可以帮我理解ctrl参数中控制器的来源吗?

编辑:该指令有一个角度require属性,按名称指定另外两个指令:

require: ['ngModel', '?numberFormatterPreventInvalidInput'],

我怀疑他们是从那里来的。

2 个答案:

答案 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用于控制器定义的指令:在你的指令中