我有一对指令,一个存在于另一个指令中,需要使用require: '^parentTag'
。这两个指令还声明了自己的控制器。在父指令内部,我可以访问其控制器作为link: function(scope, el, attrs, ctrl)
的第四个参数,但在子节点中,第四个参数是所需的控制器或所需控制器的数组,并且指令控制器不再可访问。
我试图要求控制器使用controllerAs 'vm'
中使用的名称,并使用控制器的字符串名称。也没有让控制器回到第四个参数。
可以从作为scope.vm
的范围访问控制器,但如果可能的话,我想通过第四个参数访问它。
这个Plunkr显示ChildController不在第四个参数中,只在范围内,但ParentController可以作为第四个参数访问。
答案 0 :(得分:1)
您可以通过其名称要求相同的指令(从未见过任何人实际执行此操作):
function ChildTag() {
return {
restrict: 'AE',
require: ['^parentTag', 'childTag'],
scope: {},
template: '<div class="child-tag">Child</div>',
link: link,
controller: ChildController,
controllerAs: 'vm',
bindToController: true
}
function link(scope, element, attrs, ctrls, transclude) {
// ctrls[1] is ChildController
console.log('Child vm not found in ctrls', ctrls);
console.log('Child vm found on scope', scope.vm);
}
}