好,找到了…
如果要获取父元素的控制器,请执行以下 *** 作:
...link: function(scope, iElement, iAttrs, controller) { // http://docs.angularjs.org/api/angular.element // jQuery/jqLite Extras: // // controller(name) - retrieves the controller of the current element or its parent. // By default retrieves controller associated with the ngController directive. // If name is provided as camelCase directive name, then the controller for this // directive will be retrieved (e.g. 'ngModel'). var parentCtrl = iElement.parent().controller('box');}...
这将返回父指令的控制器,或者返回更高一级的父指令的父指令的控制器。如果您需要确保获得DIRECT父指令的控制器,我发现了这一点(也许有更好的解决方案,我没有知道):
...controller: function($scope, $element) { // store the element in controller, we'll need it later this.$element = $element;},// works in both pre and post link functionslink: function() { var parentElement = $element.parent(); var parentCtrl = parentElement.controller('box'); var hasDirectBoxParent = parentCtrl && parentCtrl.$element[0] === parentElement[0];}...
范例1:
<box id="a"> <box id="b"></box><box>
在“框a”上调用链接函数时
undefined,两种情况下都使用parentCtrl
。在“框b”上调用链接功能时,在两种情况下parentCtrl都是“框a”的控制器。
范例2:
<box id="a"> <div> <box id="b"></box> </div><box>
在“框a”上调用链接函数时
undefined,两种情况下都使用parentCtrl 。当在“ box
b”上调用链接函数时,在两种情况下parentCtrl仍是“ box
a”的控制器,但是hasDirectBoxParent为
false,因此您可以将父项与祖父母区分开。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)