2017-03-15 11 views
0

ナビゲーションメニュー用のparentディレクティブとメニューリンク用のchildディレクティブがあります。親ディレクティブと子ディレクティブとの間で引数を渡す

<menu> 
    <menu-link /> 
    <menu-link /> 
</menu> 

私はng-translucentを使ってhtmlを追加することができます。 メニューからすべてのメニューリンク要素に引数を渡す方法はありますか?例えば 、場合:私はすべてのメニューリンクディレクティブは親からその値を取得したい

<menu ng-disabled='true'.. 

。 もう1つ:各メニューリンクには独自の属性があるため、独自のスコープが必要です。

答えて

1

requireを利用できます。詳しくは、angular directiveのドキュメントをご覧ください。美しく見える

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

が、何であれば、私は別のモジュール内の各ディレクティブを持っていると私はそれを変更することはできません。

は、より多くの情報のための例を参照してください? 例:'angular.module( 'menu.directive'、[])。ディレクティブ( 'menu'、fucntion ....' と 'angular.module( 'menu.link.directive'、[]) ).directive( 'menuLink'、fucntion .... ' 私はこれを書いていませんでしたが、変更できません。 – user1351452

+0

'In menuディレクティブに言及すると、ng-translucentを使用してhtmlを追加できます。あなたが作者ではない、実際には実装を変更することができないとは思われません。質問を明確な形で投稿してください。そうすれば、他の人があなたのことを理解しやすくなります。 あなたの最初の質問、つまり '異なるモジュールの各ディレクティブ'に関しては、 'require:'が 'require: 'と言ったように親コントローラを見つける' DOM'を検索しても問題ありません^^myDirec tive''llは* ^^ *に気付く。 – Gaurav

+0

あなたの2番目の質問については、私はそれを変更することはできません。私はソースコードを知らないのでこれについて多くのコメントをすることはできませんが、デコレータパターン@ https://en.wikipedia.org/wiki/Decorator_patternにあります。 Angularは、Angular Decoratorsと同様のものを提供します。https://docs.angularjs.org/guide/decoratorsをご覧ください。デコレータを使用すると、既存のビヘイビアを変更したり、新しいビヘイビアを追加することができます。 – Gaurav

関連する問題