У меня есть директива Angular, которая устанавливает высоту элемента, равную внутренней высоте окна браузера (+/- заданное смещение). Эта директива реагирует на событие "изменить размер" окна и соответственно регулирует его высоту. Когда масштаб моей директивы испускает событие "$ destory", я удаляю привязку к событию "изменить размер" (я думаю, что оставить его на месте вызовет некоторые проблемы, исправьте меня, если я ошибаюсь).
Я не знаю, как сделать этот отряд событий "безопасным" способом. Что делать, если у меня есть несколько экземпляров этой директивы в моем приложении, и что, если у меня есть другие директивы, которые присоединяются к событию "изменить размер" ?
JQuery имеет концепцию пространства имен событий, которое кажется хорошим решением, но реализация Angular (JQLite) не поддерживает это. Я бы предпочел не использовать JQuery, поскольку я уже использую Angular, так что мне делать?
Здесь код для моей директивы, как сегодня
window.angular.module('arcFillClient', [])
    .directive('arcFillClientY', ['$window',
        function ($window) {
            function link($scope, el, attrs) {
                var setHeight,
                    onResize,
                    cleanUp;
                setHeight = function (offSetY) {
                    var newHeight;
                    offSetY = offSetY || 0;
                    newHeight = Math.max($window.innerHeight + parseInt(offSetY, 10)) + 'px';
                    el.height(newHeight);
                };
                onResize = function () {
                    var offset;
                    offset = attrs.arcFillClientY || 0;
                    setHeight(offset);
                };
                attrs.$observe('arcFillClientY', setHeight);
                window.angular.element($window).on('resize', onResize);
                cleanUp = function () {
                    window.angular.element($window).off('resize');
                };
                $scope.$on('$destroy', cleanUp);
            }
            return {
                link: link
            };
  UPDATE Похоже на случай RTFM, но на всякий случай кто-то еще блуждает здесь, вот еще информация. Передача исходной функции (в моем случае OnResize) в .off() работает, чтобы изолировать область действия функции .off(). Из docs:
Обработчик также можно удалить, указав имя функции в аргументе обработчика. Когда jQuery {ahem... JQLite} присоединяет обработчик событий, он присваивает уникальный идентификатор функции обработчика.
Здесь обновленная функция cleanUp из моей директивы:
cleanUp = function () {
    window.angular.element($window).off('resize', onResize);
};
Спасибо tasseKATT, Karolis и Hans за ваши вклады.
