我正在使用angular 1.2和angular-bootstrap模态指令。我有一个Controller1打开一个模态窗口。我在iframe中加载了外部应用程序。当用户完成使用外部应用程序时,该应用程序在调用之前调用returnUrl,参数I。外部应用程序为returnUrl添加了一些参数,因此我可以阅读那里发生的事情(此时并不重要)。
myApp.controller('Controller1', [ '$scope', '$rootScope', '$modal', function($scope, $rootScope, $modal){
var modalInstance = $modal.open({
templateUrl : 'modalContent.html',
controller : 'Controller2',
backdrop : 'static'
});
modalInstance.result.then(function(){
//
}, function(){
$rootScope.loadingScreen.hide();
});
} ]);
myApp.controller('Controller2', [ '$scope', '$modalInstance', '$rootScope', function($scope, $modalInstance, $rootScope){
// returning from modal window
$rootScope.$on('event:return-from-external', function(){
//never gets here?
$modalInstance.dismiss('cancel');
});
$scope.cancel = function(){
$modalInstance.dismiss('cancel');
};
} ]);
要阅读外部应用程序中发生的事情,我创建了一个处理外部应用程序返回的路由器:
myApp.config([ '$routeProvider', function($routeProvider){
$routeProvider.when('/returnFromModalWindow/:id', {
templateUrl : 'returnFromModalWindow/returnFromModalWindow-list.tpl.html', //just to show loader
controller : 'ReturnFromModalWindowController'
});
} ]);
这个rooter有控制器ReturnFromModalWindowController做一些逻辑,应该关闭模态窗口并返回我的应用程序。
myApp.controller('ReturnFromModalWindowController', [ '$scope', '$routeParams', '$rootScope', function($scope, $routeParams, $rootScope){
//read parameters
//do some logic
//emit to close modal window
$rootScope.$emit('event:return-from-external');
} ]);
问题是我从未在Controller2中捕获发出的'事件:从外部返回'。 在这种情况下如何关闭模态窗口? $ rootScope。$ on无效或者有更好的方法可以做到这一点吗?