如何通过递归要求访问父指令的控制器?

如何通过递归要求访问父指令的控制器?,第1张

如何通过递归要求访问父指令控制器

好,找到了…

如果要获取父元素的控制器,请执行以下 *** 作:

...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
,因此您可以将父项与祖父母区分开。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5560256.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存