非常に単純な構造のサンプルアプリがあります (ここで見ることができます: http://plnkr.co/edit/5VAqUQsqKFGoteahacR2?p=preview ): ファイル index.html にはテンプレート (app/templates/home.html) が含まれています。これには、ディレクティブのテンプレートが含まれます。
<div class="included" ng-include="'app/templates/outer-directive-2.html'"></div>
次のディレクティブが含まれます。
<p>This is the included file <b>app/templates/outer-directive-2.html</b></p>
<div inner2="context"></div>
param inner2の値は、contentsCtrl コントローラーで定義されている $scope.contents オブジェクトのキーです。
app.controller('contentsCtrl', function($scope,$rootScope){
$scope.contents = {
context: "Context for investigations here."
}
});
このキーは、ディレクティブのスクリプト (app/scripts/directives/defaultDirective.js) でオブジェクト フィールドを抽出するために必要です。
app.directive('inner2', function(){
return{
restrict: 'A',
replace: true,
scope: {
inner2: '@',
contents: '&'
},
templateUrl: 'app/templates/inner-directive-2.html',
controller: function($scope){
$scope.getStuff = function(){
console.log('$scope.inner2, $scope.contents', {
// returns the key "context"
'$scope.inner2':$scope.inner2,
// returns function (???)
'$scope.contents':$scope.contents,
// returns "undefined"
'$scope.context':$scope.contents[$scope.inner2]
});
}
}
};
});
最後に折りたたまれたディレクティブ (app/templates/inner-directive-2.html) の内容は非常に単純です。
<div class="included" title="{{inner2}}">
<p>Hello, I am the inner directive 2</p>
<span class="pseudolink" ng-click="getStuff()">Click me</span> and check console message!
</div>
つまり、getStuff() を呼び出して $scope.contents[object_key] を取得するという考え方です。しかし、$scope.contents を見ることはできません。分離されたスコープ パラメータ (上記参照) の内容を外側のスコープにバインドすることで実現できるのではないかと考えました。
scope: {
....
contents: '&'
},
...しかし、スコープ オブジェクトは返さず、代わりに関数を返します。おそらくここで何かが間違っています。質問は: 1. なぜ機能し、どこから来るのか? 2. 何らかの方法で $scope.contents を取得できますか?