gpt4 book ai didi

angularjs - 在AngularJS中递归访问父指令的 Controller

转载 作者:行者123 更新时间:2023-12-04 22:47:14 25 4
gpt4 key购买 nike

我需要得到 parent 的 Controller ,所以我的指令有一个require属性,如下:

module.directive('tag', function () {
return {
require: '?^tag',
restrict: 'E',
controller: function () {
this.payload = getPayload();
},
link: function (scope, element, attrs, ctrl) {
usePayload(ctrl.payload);
}
};
});

然而,链接函数的 ctrl 参数返回当前指令的 Controller ,而不是父指令的 Controller 。 AngularJS 文档对此很清楚:

?^ - Attempt to locate the required controller by searching the element's parents, or return null if not found.



我究竟做错了什么?

最佳答案

文档或代码在这里具有误导性... require^查看当前元素,然后查看所有父元素,使用 inheritedData方法(见 https://github.com/angular/angular.js/blob/master/src/ng/compile.js#L942)。因此,您将无法使用这种方法从父级请求具有相同名称的指令。

当我过去遇到这个问题时,我查看了 form指令需要做你所要求的。它的 Controller 方法像这样抓取父级( https://github.com/angular/angular.js/blob/master/src/ng/directive/form.js#L39 ):

controller: function($element) {
var parentForm = $element.parent().controller('form');
}

拿着这个,你应该可以调用 element.parent().controller('tag')在 Controller 或 postLink 方法中查找父 Controller 。

关于angularjs - 在AngularJS中递归访问父指令的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19320062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com