我有这种情况,我需要访问多个指令控制器方法.
我可以使用require来从父指令访问一个方法,如下所示:
require:"^parentDirective"
但是我还需要在单独的指令(不是父指令)中访问一个方法,文档说到use an array of strings是这样的:
require:["^parentDirective","directiveTwo"]
但这样做会导致错误,尽管两个指令都已编译到DOM.
我在这里错过了什么吗?
这是我的指示:
angular.module('testModule',['parentModule'],function () { }).directive('testDirective',function() { return { restrict: 'AE',templateUrl: 'testTemplate.tpl.html',scope: { value1: "=",value2: "=" },require:['^parentDirective','otherDirective'],controller: function($scope,$modal,socketConnection) { if(case_x == true){ $scope.requiredController_1.ctrl1Func(); } else if(case_x == false){ $scope.requiredController_2.ctrl2Func(); } },link: function(scope,element,attrs,requiredController_1,requiredController_2){ scope.requiredController_1 = requiredController_1; scope.requiredController_2 = requiredController_2; } }; });
解决方法
我认为这很接近你想要的(希望如此):
http://plnkr.co/edit/WO6SROdVFOYlR22JQJPb?p=preview
以下是一些想法:
>我认为控制器:function(){}是在向下的路上执行的,而link:function(){}是在备份的过程中执行的(在它走下DOM树之后发生),这意味着你需要将依赖于其他控制器的代码从指令控制器移动到指令链接功能.
>使用require的指令只需要父元素(使用^)或当前元素的指令.你最初在你的html中拥有所有兄弟姐妹的元素.如果需要这样,你需要将所有兄弟姐妹包装在他们都“需要”的第四个指令中.
>当您需要:[]时,数组将传递给链接函数.因此:
link: function(scope,controllers) { var parent1 = controllers[0]; var other = controllers[1]; }
这回答了一切吗?