Слушаю событие для $rootScope в директиве. Элемент с директивой может исчезать и снова появляться на странице. Каждый раз при смене видимости происходит добавление слушателя для $rootScope. В результате при вызове события обработчик вызывается несколько раз.
Как правильно удалять $rootScope.$on в Angularjs? Сейчас использую $rootScope.$$listener, но в документации говорится что использовать приватные поля не стоит.
$on
...
Returns
function()
Returns a deregistration function for this listener.
Но я бы вам советовал пореже использовать $rootScope, со временем он может превратиться в антипаттерн "глобальная переменнная". Лучше использовать сервисы как общие компоненты для нескольких модулей.
Спасибо за ссылку, вот только у моей директивы изолированный $scope; Получается та же глобальная переменная для хранения deregistration function, т.к хранить ее больше негде.