独自のコントローラーを使用して2つのビューを持つことができる要素が必要ですが、一度に1つだけです。ng-viewを使用してrouteProviderを使用することはできません。将来、可能なアクションに応じてコンテンツを変更する必要があるng-includeをさらに含める必要があるためです。
フィドルhttp://jsfiddle.net/EvHyT/29/を作成しました。
そこで、ng-includeを使用して、メインコントローラーからそのsrcを設定しました。その時点で、コントローラー1またはコントローラー2を使用します。
function MainCtrl($rootScope, $scope, navService){
$scope.template = {};
$scope.loadCtrl1=function(param){
navService.loadCtrl1(param);
}
$scope.loadCtrl2=function(param){
navService.loadCtrl2(param);
}
$rootScope.$on('loadCtrl1', function(e, args){
$scope.template = {'url': 'temp1'};
});
$rootScope.$on('loadCtrl2', function(e, args){
$scope.template = {'url': 'temp2'};
});
}
子コントローラーの負荷コントローラー機能を移動したいので、通信サービスを利用しています。
var myApp = angular.module('myApp',[]);
myApp.factory('navService', function($rootScope) {
return {
loadCtrl1:function(param){
$rootScope.$broadcast('loadCtrl1', {'id':param});
},
loadCtrl2:function(param){
$rootScope.$broadcast('loadCtrl2', {'id':param});
}
};
});
別のテンプレートが挿入されたときにコントローラーがまだ作成されていないため、このソリューションが悪いことはわかっています。そのため、イベントリスナーは起動しません。また、2つのコントローラーを切り替えるとイベントが複数回発生するため、コントローラーの以前のインスタンスを破棄できますか。
function Child1Ctrl($scope, $rootScope){
$rootScope.$on('loadCtrl1', function(e, args){
alert(args.id);
});
}
function Child2Ctrl($scope, $rootScope){
$rootScope.$on('loadCtrl2', function(e, args){
alert(args.id);
});
}