我想要一个元素,我可以使用他们自己的控制器有 2 个视图,但一次只能有一个。我不能使用 ng-view 并使用 routeProvider,因为将来我需要包含更多 ng-include,这些 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});
}
};
});
我知道这个解决方案很糟糕,因为插入不同的模板时尚未创建控制器,因此我的事件侦听器不会触发。我也可以销毁控制器的先前实例,因为在两个控制器之间切换会使我的事件多次触发。
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);
});
}