2013-11-14 2 views
2

Я хочу вызвать предупреждение в другом представлении после того, как $ location.path() изменил ng-view (без использования $ rootScope).

В моем спусковом контроллер событии у меня есть:

$location.path('/'); 
myService.setAlert("My alert"); 

Моя служба передает "сообщение" и $ транслировать событие

myService.broadcastAlert = function(){ 
    $rootScope.$broadcast('alertChanged'); 
}; 

myService.setAlert = function(message){ 
    myService.alert = message; 
    rootScope.$on('$routeChangeSuccess', function() { 
    myService.broadcastAlert(); 
    }); 
} 

контроллер Моего Другого вида получает предупреждение

$scope.$on('alertChanged', function(){ 
    console.log("New Alert is triggered"); 
}); 

Проблема в том, что rootScope. $ On ('$ routeChangeSuccess') продолжает работать после

ответ

2

Может быть, вам нужно дерегистрация:

myService.setAlert = function(message){ 
    myService.alert = message; 
    var deregister = rootScope.$on('$routeChangeSuccess', function() { 
    myService.broadcastAlert(); 
    deregister(); 
    }); 
}; 
+0

Он отлично работает, спасибо! Но я не совсем уверен, что понимаю, как это работает, не могли бы вы рассказать мне, где я могу больше узнать о функции регистрации? – lproust

+1

Уверен: документы для 'Scope' для [1.1.5] (http://code.angularjs.org/1.1.5/docs/api/ng.pyroScope.Scope) или [последние] (http: // docs.angularjs.org/api/ng.$rootScope.Scope). Проверьте возвращаемое значение метода '$ on'. На самом деле это не имеет большого значения: '$ on()' возвращает функцию дерегистрации. При вызове он просто отменяет прослушивание. –

+0

Это все еще использует rootScope, не так ли? – mila

Смежные вопросы