0
私は、それぞれの要素にツールディレクティブ(選択、編集、削除ボタン)があるリストディレクティブ(実際にはテーブルですが、それは関係ありません)を持っています。 toolsディレクティブは各アクションのコールバックを取得するので、特定のコントローラは各アクションを個別に実装できます。現在、選択した項目をコントローラのコールバックに渡す方法はわかりません。 これに関するアイデアは?角度ネストされたディレクティブのコールバック
ツールディレクティブ:
Javascriptを: ここで私は、コールバック
app.directive('itemTools', function() {
return {
restrict: 'AE',
transclude: true,
scope: {
item: '=',
selectCallback: '&',
editCallback: '&',
deleteCallback: '&',
cloneCallback: '&',
activateCallback: '&',
deactivateCallback: '&',
},
link: function(scope, element, attr) {
},
templateUrl:'templates/common/item.tools.html',
controller: function($rootScope, $scope) {
}
}
}を定義します)。
HTML:
<div>
<button ng-click="selectCallback({id: item.id})">
</button>
<button ng-click="editCallback({id: item.id})">
</button>
<button ng-click="deleteCallback({id: item.id})">
</button>
<button ng-click="cloneCallback({item: item})">
</button>
<button ng-click="activateCallback({item: item})">
</button>
<button ng-click="deactivateCallback({item: item})">
</button>
</div>
リストディレクティブ: これらのコールバックがアイテムツール
app.directive('moduleList', function() {
return {
restrict: 'E',
scope: {
modules: '=',
selectCallback: '&',
editCallback: '&',
deleteCallback: '&',
cloneCallback: '&',
activateCallback: '&',
deactivateCallback: '&',
},
templateUrl:'templates/module/module.list.html',
controller: function($scope) {
}
}
})にさらに処理されます。
HTML:
<table class="table table-responsive">
<tbody>
<tr ng-repeat="item in items | orderBy:orderByField:reverseSort>
<td class="text-center">
SOME DATA OF THE OBJECT....
</td>
<td>
<item-tools
item="item"
select-callback="selectCallback({id: item.id})"
edit-callback="editCallback(item.id)"
delete-callback="deleteCallback(item.id)"
clone-callback="cloneCallback(item)"
activate-callback="activateCallback(item)"
deactivate-callback="deactivateCallback(item)">
</item-tools>
</td>
</tr>
</tbody>
</table>
私は、コントローラの機能が呼び出されることを、これまでのところ、すでにそれを得たが、私はどのように選択したアイテム自体に渡すことは考えています。
ありがとうございます。
一般的にあなたがディレクティブを入れ子にしている場合、あなたは、角度の例を参照してください(親ディレクティブコントローラをリンクする必要があります。 //plnkr.co/edit/xgrXXIbEQvqiGSQRebYQ?p=preview)。子ディレクティブが話すための親ディレクティブのAPIを基本的に開きます。あなたの親ディレクティブがコントローラと通信するようにするには、$ broadcastを使用してコントローラ内のイベントをリスンすることができます。理にかなっている? – panzhuli
ありがとう、イベントを使用するための素晴らしいアイデア。しかし、** $放送**の代わりに、私は** $ emit **を好みます。 – Dimi