2017-03-15 6 views
0

Ich habe übergeordnete Direktive für Navigationsmenü und untergeordnete Anweisungen für Menüverknüpfungen. So etwas wie das:Übergeben Sie Argument zwischen übergeordneten und untergeordneten Anweisungen

In Menürichtlinie verwende ich ng-transluzent, um HTML hinzufügen zu können. Gibt es eine Möglichkeit, Argumente aus dem Menü an alle Menü-Link-Elemente zu übergeben? Wenn zum Beispiel:

<menu ng-disabled='true'.. 

Ich mag alle Menü-Link-Richtlinien, diesen Wert von den Eltern zu bekommen. Eine weitere Sache: Jeder Menü-Link hat seine eigenen Attribute, also muss er einen eigenen Bereich haben.

Antwort

1

Sie können require verwenden, für weitere Informationen lesen Sie die angular directive doc.

Siehe das Beispiel für weitere Informationen:

angular.module('myApp', []) 
 
    .controller('MyController', MyController) 
 
    .controller('MyDirectiveController', MyDirectiveController) 
 
    .directive('myDirective', myDirective) 
 
    .directive('childDirective', childDirective) 
 

 
function MyController($scope) { 
 

 
} 
 

 
function MyDirectiveController($scope) { 
 
    this.isDisabled = function() { 
 
    return $scope.disabled; 
 
    }; 
 
} 
 

 
function myDirective() { 
 
    return { 
 
    restrict: 'E', 
 
    transclude: true, 
 
    template: '<div>myDirective Disabled: {{ disabled }}<ng-transclude></ng-transclude></div>', 
 
    scope: { 
 
     disabled: '=?ngDisabled' 
 
    }, 
 
    controller: 'MyDirectiveController' 
 
    }; 
 
} 
 

 
function childDirective() { 
 
    return { 
 
    restrict: 'E', 
 
    require: '^^myDirective', 
 
    template: '<div>childDirective disabled: {{ disabled }}</div>', 
 
    scope: {}, 
 
    link: function(scope, elem, attrs, myDirectiveCtrl) { 
 
     scope.disabled = myDirectiveCtrl.isDisabled(); 
 
    } 
 
    }; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.min.js"></script> 
 

 
<div ng-app="myApp"> 
 

 
    <div ng-controller="MyController"> 
 
    <my-directive ng-disabled="true"> 
 
     <child-directive></child-directive> 
 
     <child-directive></child-directive> 
 
    </my-directive> 
 
    </div> 
 

 
</div>

+0

Das sieht schön aus, aber was, wenn ich jede Richtlinie in anderen Modul haben, und ich kann es nicht ändern? Zum Beispiel: 'angular.module ('menu.directive', []). Directive ('menu', fuction ....' und 'angular.module ('menu.link.directive', []) .directive ('menuLink', fuction .... ' Ich habe dies nicht geschrieben, aber ich kann es nicht ändern. – user1351452

+0

Wenn Sie' In menu direction angeben, benutze ich ng-translucent, um html hinzufügen zu können. ', es klingt nicht, dass Sie nicht der Autor sind oder die Implementierung nicht wirklich ändern können Bitte versuchen Sie, die Frage in einem klaren Ton zu stellen, so wird es für andere leicht sein, Ihre zu verstehen frage und antworte darauf In Bezug auf deine erste Frage, dh 'jede Direktive in einem anderen Modul', spielt es keine Rolle, da' require' das 'DOM' nachschlägt, um den übergeordneten Controller zu finden, wie bereits erwähnt' require: '^^meinDirekt Beachten Sie die * ^^ *. – Gaurav

+0

Und in Bezug auf Ihre zweite Frage "Ich kann das nicht ändern" kann ich nicht viel dazu sagen, da ich den Quellcode nicht kenne, aber eine Sache, die ich sagen kann, ändern Sie es, wenn Sie können, oder bitte schauen Sie es sich an bei Decorator Muster @ https://en.wikipedia.org/wiki/Decorator_pattern. Angular bietet auch ähnliche Dinge an, die Angular Decorators genannt werden. Sehen Sie sich dazu https://docs.angularjs.org/guide/decorators an. Mit Dekoratoren können Sie das bestehende Verhalten modifizieren oder ein neues hinzufügen. – Gaurav

Verwandte Themen