我有一个指令需要两个控制器,并且另一个控制器使用controller
属性TreeNodeController
指定。
.directive('uiTreeNode', function () {
return {
require: ['^uiTreeNodes', '^uiTree'],
controller: 'TreeNodeController',
link: function (scope, element, attrs, controllers) { ... }
};
});
我的问题是如何从TreeNodeController
方法访问link
?
当我记录controllers
参数时,它是一个仅包含uiTreeNodes
和uiTree
控制器的数组。
答案 0 :(得分:1)
如果您需要访问指令的控制器,您也必须要求它。在require数组中使用指令名称(不是控制器名称)。
.directive('uiTreeNode', function () {
return {
require: ['^uiTreeNodes', '^uiTree', 'uiTreeNode'],
controller: 'TreeNodeController',
link: function (scope, element, attrs, controllers) {
var treeNodeCtrl = controllers[2];
}
};
});
如果您使用controllerAs
语法,则控制器也在范围内:
.directive('uiTreeNode', function () {
return {
require: ['^uiTreeNodes', '^uiTree'],
controller: 'TreeNodeController',
controllerAs: 'view',
link: function (scope, element, attrs, controllers) {
var treeNodeCtrl = scope.view;
}
};