在Angularjs中使用require中的多个指令

use*_*240 7 javascript require angularjs angularjs-directive

我有这种情况,我需要访问多个指令控制器方法.

我可以使用require来从父指令访问方法,如下所示:

    require:"^parentDirective"
Run Code Online (Sandbox Code Playgroud)

但是我还需要在单独的指令(不是父节点)中访问一个方法,文档说要使用像这样的字符串数组:

    require:["^parentDirective","directiveTwo"] 
Run Code Online (Sandbox Code Playgroud)

但这样做会导致错误,尽管两个指令都已编译到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;

            }

        };

    });
Run Code Online (Sandbox Code Playgroud)

Wor*_*red 7

我认为这很接近你想要的(希望如此):

http://plnkr.co/edit/WO6SROdVFOYlR22JQJPb?p=preview

以下是一些想法:

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

  2. 使用的指令require只需要父元素(使用^)或当前元素的指令.你最初在你的html中拥有所有兄弟姐妹的元素.如果需要这样,你需要将所有兄弟姐妹包装在第四个指令中,而这些指令都是" require".

  3. 当你做require: []一个数组传递给链接函数.因此:

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

这回答了一切吗?