我想有元素,我可以有2個視圖使用自己的控制器,但一次只有一個。 我無法使用ng-view並使用routeProvider,因爲將來我需要包含更多的ng-includes,這些ng-includes需要根據可能的操作更改其內容。Angularjs不同的控制器之一包括
我創建了一個小提琴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});
}
};
});
我知道這個解決方案是壞的,因爲當一個不同的模板被插入,所以我的事件監聽器將不會觸發尚未創建的控制器。我也可以銷燬以前的控制器實例,因爲在兩個控制器之間切換會使我的事件觸發多次。
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);
});
}
不確定我得到了你,但是你的意思是像
? – bresleveloper