ディレクティブで定義されたコントローラーからスコープ変数にアクセスする正しい方法は何ですか?
例として、クリック イベントで親ディレクティブのコントローラーの関数を呼び出したいとします。親ディレクティブでは、コントローラーが「定数」、FOO_VIEW、BAR_VIEW、BAM_VIEWにアクセスできるようにしたい
これらの定数を最上位のコントローラ、この場合は SearchCtrl (表示されていません) に配置する方が理にかなっていますか?
ディレクティブ:
.directive('usersAndApps', function() {
return {
restrict:'EA',
scope: true,
controller: function() {
this.toggleView = function(viewName){
console.log('show view ' + viewName);
}
},
link:function(scope, elem, attrs) {
scope.FOO_VIEW = 'fooView';
scope.BAR_VIEW = 'barView';
scope.BAM_VIEW = 'bamView';
}
}
}).directive('usersAndAppsNav', function() {
return {
restrict: 'AE',
require:'^?usersAndApps',
replace:true,
scope:true,
link:function(scope,elem,attrs,usersAndAppsCtrl){
scope.toggleView = function(viewName){
usersAndAppsCtrl.toggleView(viewName);
}
},
templateUrl:'partials/usersAndApps/throwmeaway'
}
});
テンプレート:
<div>
<button class="btn btn-large btn-primary" ng-click="toggleView(FOO_VIEW)">Foo View</button>
<button class="btn btn-large btn-primary" ng-click="toggleView(BAR_VIEW)">Bar View</button>
<button class="btn btn-large btn-primary" ng-click="toggleView(BAM_VIEW)">Bam View</button>
</div>
ディレクティブとネストされた (子) ディレクティブ:
<div ng-controller="SearchCtrl">
<users-and-apps>
<users-and-apps-nav></users-and-apps-nav>
</users-and-apps>
</div>