Javascript 在require和Angularjs中使用多个指令

Javascript 在require和Angularjs中使用多个指令,javascript,angularjs,angularjs-directive,require,Javascript,Angularjs,Angularjs Directive,Require,我需要访问多个指令控制器方法 我可以使用以下命令从父指令访问方法: require:"^parentDirective" 但我还需要访问单独指令(而不是父指令)中的方法,文档中这样说: require:["^parentDirective","directiveTwo"] 但是这样做会导致错误,尽管这两个指令都已编译到DOM中 我是不是遗漏了什么 这是我的指示: angular.module('testModule', ['parentModule'], funct

我需要访问多个指令控制器方法

我可以使用以下命令从父指令访问方法:

    require:"^parentDirective"
但我还需要访问单独指令(而不是父指令)中的方法,文档中这样说:

    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;

            }

        };

    });

require语句后面需要一个逗号

require:['^parentDirective','otherDirective'], //<--- right there

require:['^parentDirective','otherDirective'],//我认为这接近您想要的(希望):

以下是一些想法:

  • 我认为
    controller:function(){}
    是在下行过程中执行的,而
    link:function(){}
    是在备份过程中执行的(这发生在它沿着DOM树下行之后),这意味着您需要将依赖于其他控制器的代码从指令控制器移动到指令链接函数

  • 使用
    require
    的指令只能要求父元素(使用
    ^
    )或当前元素上的指令。最初,html中的元素都是同级元素。如果需要,您需要将所有同级封装在第四个指令中,它们都“
    需要”

  • 当您执行
    require:[]
    时,一个数组被传递到link函数中。因此:

    link: function(scope, element, attrs, controllers) {
      var parent1 = controllers[0];
      var other = controllers[1];
    }
    

  • 这能回答所有问题吗?

    你能把这三条指令放在一起吗?我唯一看到的错误是在link函数中,函数接收一个控制器数组,而不是单独接收每个控制器(除非更改)。对于我正在尝试做的事情,但它似乎仍然不起作用,我也不确定为什么。嗨,丹,谢谢你的回答,这是我的错别字,工作代码实际上有一个逗号,我已经更改了示例代码以修复该错别字。同样感谢您的plunkr示例,它可以按预期工作,但是在您的示例中,所有指令都包含在一个模块中,在我的示例中,require中调用的两个指令都存在于示例模块之外,因此,尽管您的示例可以工作,但对我的情况仍然没有帮助。@user1005240啊,好的。根据我从您的问题中了解到的情况,您似乎在尝试嵌套模块,根据文档,这是明确不允许的:它说,
    AngularJS应用程序不能相互嵌套
    ,据我所知,我没有完全嵌套它们,我正在创建的是一个大型应用程序,其中包含多个加载在其中的模块,其中一些模块作为依赖项相互链接,这很好,允许数据通过不同的模块传递。其中一些模块包含我需要在其模块控制器之外访问的指令方法,当我只“需要”一个字符串(指令名称)时,我可以这样做,但当我对多个“需要”指令使用字符串数组格式时,它不起作用。感谢您的洞察力,我面临的问题是双重的,首先,我试图访问在无关模块(不是父模块或调用该方法的模块)中找到的指令中的方法,我不知道这是不允许的。我的第二个问题是,我没有在link函数中正确访问控制器元素。谢谢你的回答:)