transclude
オプションがtrueに設定された、分離されたスコープを持つディレクティブとして、単純な再利用可能なコレクションコンテナを作成しました。
app.directive('itemWrapper', function() {
return {
template: '...',
replace: true,
transclude: true,
restrict: 'E',
scope: {
name: '=',
isExpanded: '='
}
};
});
そして、リスト項目のクリックを処理するコントローラーから関数を渡したいリスト ビュー ディレクティブ
app.directive('listItem', function() {
return {
template: '...',
replace: true,
restrict: 'E',
scope: {
item: '=',
action: '&'
},
link: function(scope, elm, attrs){
scope.performAction = function(val){
action({'data': val});
};
}
};
});
私のHTMLのチャンクは次のようになります。
<collection-wrapper name='item.name' is-expanded='item.visible'>
<list-item item='item' action='log(data)'></list-item>
</collection-wrapper>
action
しかし、リンクをクリックすると、定義されていないという参照エラーが表示されます。問題は、コントローラーからこのディレクティブに関数を渡す方法です。私が理解しているように、transcluded スコープは独立したスコープの子であり、これは私が乗り越えられなかった障害です!
これがPlunkrです。