ByKraB
@ByKraB

Как удалить $rootScope.$on listener в Angularjs?

Приветствую.

Слушаю событие для $rootScope в директиве. Элемент с директивой может исчезать и снова появляться на странице. Каждый раз при смене видимости происходит добавление слушателя для $rootScope. В результате при вызове события обработчик вызывается несколько раз.

Как правильно удалять $rootScope.$on в Angularjs? Сейчас использую $rootScope.$$listener, но в документации говорится что использовать приватные поля не стоит.
  • Вопрос задан
  • 2563 просмотра
Решения вопроса 1
@Demetros
Момент удаления элемента отслеживаем так:

var deregFunc = $rootScope.$on('someEvent', function() {});
scope.$on('$destroy', function() {
  deregFunc();
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
DigitalSmile
@DigitalSmile
http://brainstorage.me/digitalsmile
https://docs.angularjs.org/api/ng/type/$rootScope.Scope
$on
...
Returns
function() 	

Returns a deregistration function for this listener.


Но я бы вам советовал пореже использовать $rootScope, со временем он может превратиться в антипаттерн "глобальная переменнная". Лучше использовать сервисы как общие компоненты для нескольких модулей.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы