Я использую всплывающее окно всплывающего окна bootstrap и пытаюсь исправить и событие $, но по какой-то причине главная страница не обнаруживает событие. Это довольно простая настройка, но я не могу понять, почему. Из того, что я могу сказать при просмотре Batarang, появляется всплывающее окно с охватом основной области приложения, поэтому я думал, что это сработает, но это не так. В этом простом приложении, когда вы нажимаете «ok» во всплывающем окне, оно должно установить значение в родительской области. Вот plunker:
http://plnkr.co/edit/F2W1LaWSsqinaFpiISAr?p=preview
//Here's code where $emit is called in the child (Factory):
var modalInstance = $modal.open({
templateUrl: 'popupMyWindow.html',
pScope: parentScope,
controller:
function($scope, $modalInstance){
$scope.ok = function() {
$scope.$emit('ModalSelect', 'hello world');
$modalInstance.close(null);
}
},
//Here's where $on is called in the main controller:
$scope.$on('ModalSelect', function (event, selected) {
console.log('ModalSelect called successfully');
$scope.selectedValue = selected;
});
Спасибо!
Спасибо, используя трансляцию с rootscope сделал трюк – Rob
Однако это плохая практика. Во-первых, производительность: root будет выделять все дочерние области в вашем приложении независимо от того, слушают они или нет. Во-вторых, вы создаете зависимость от rootScope, тем самым уменьшая повторное использование (см. Http://stackoverflow.com/questions/24830679/why-we-use-rootscope-broadcast-in-angularjs) – SKuijers
Чтобы быть точным, пузырь '$ emit' вверх по иерархической цепочке и '$ broadcast' - вниз. Итак, root будет '$ emit' только для' $ rootScope. $ On' слушателей. Но даже с '$ broadcast' - проблема с производительностью была исправлена - [см. Этот ответ] (http://stackoverflow.com/a/19498009/968155) - и будут уведомлены только фактические слушатели. –