要するに次の質問があります:AngularJSは外部コントローラを渡して使用します
コントローラーを正しく渡して、transcludeブロックで使用します。
私が望むのは、指示者のユーザーに、transcludeブロック内の特定のコントローラを使用する機会を与えることです。異なるディレクティブの用途に共通ではない特定のアクションを実装する目的。
私はコントローラとして属性を送信し、何らかの形でそのフィールドをリンク関数のスコープに追加することはできますが、正しい方法はわかりません。
私の現在の試行は次です。 ベースHTML:
<mylist items="list" ctrl="internalCtrl1">
<li>
{{element}} <a ng-click="showAbc()">ShowAbc</a>
</li>
</mylist>
<h3>List2</h3>
<mylist items="list" ctrl="internalCtrl2">
<li>
{{element}} <a ng-click="showXyz()">ShowXyz</a>
</li>
</mylist>
指令:
<div>
<p>Cool list</p>
<!--<ul ng-controller="ctrl">-->
<ul>
<ng-transclude></ng-transclude>
</ul>
<div>
ディレクティブスクリプト:
.........
scope: {
ctrl: "=",
items: '='
},
controller: function($scope){
//some common stuff
},
link: function($scope, $element, $attrs, controller, $transclude) {
$scope.$watch("items", function(items) {
var el = $element.find("ul");
el.empty();
if(items)
items.forEach(function(item) {
var childScope = $scope.$new();
childScope.element = item;
$transclude(childScope, function(content) {
el.append(content);
});
});
});
}
全コード:https://plnkr.co/edit/kPSu9s9xpHJdACFzofdP
非常に感謝すべてのヘルプ。
Upd。私は今2つの問題を抱えて:私はディレクティブに渡されたコントローラを使用する場合
- を - 私は、エラーに「Ctrl」を得た私はディレクティブで固定コントローラを使用する場合 ない機能
- ある - コントロールに アクセス決してありませんtranscludeブロックからの機能
トランスクルードコンテンツが、それはなぜあなたはこれを保持している要素に 'NG-controller'を追加しないだろう、自分のコントローラの必要がある場合コンテンツ?例えば'
は 'scope'にあり、' = 'は双方向バインド*データ*交換です。このように関数を渡すことはできません。もしあなたが本当に***このようにしたいなら、 'ctrl'を関数として渡すには'& 'が必要です。しかし、あなたがこれをやる理由はまだ分かりませんし、あなたが完全に説明していない問題の回避策について助けを求めているように感じていますし、説明した方が問題を解決する良い方法があるかもしれませんより完全に。 – Claies