次のようなディレクティブがあります。
<selectable-item-list items="model.items">
<item-template>
<span ng-bind="item.text"></span>
</item-template>
</selectable-item-list>
問題は にあり<item-template>
ます。内部が の中でバインドされている場合、 は現在反復されている項目item
の参照になります。ng-repeat
<selectable-item-list>
私の知る限り、トランスクルージョンはディレクティブのスコープを見ることができないようです。したがって、item.text
まったくないため、バインドできませんitem
。
このシナリオをどのように解決しますか? 以前は手動でトランスクルージョン<item-template>
していましたが、他のアプローチには他の欠点/問題がありました。
これは、私の実際のケースのサンプルとして機能する実行可能なコード スニペットです。
var app = angular.module("app", []);
app.controller("some", function() {
this.items = [{
text: "hello"
}, {
text: "bye"
}];
});
app.directive("test", function() {
return {
template: `<ol>
<li ng-repeat="item in items">
<div ng-transclude="itemTemplate"></div>
</li>
</ol>`,
transclude: {
"itemTemplate": "itemTemplate"
},
scope: {
"items": "="
}
}
});
<script src="https://code.angularjs.org/1.5.7/angular.js"></script>
<div ng-app="app" ng-controller="some as some">
<test items="some.items">
<item-template>
<span ng-bind="item.text"></span>
</item-template>
</test>
</div>