AngularJS: получить область действия зависимого модуля
Получение области действия другого модуля для отправки событий;
Ациклическая Сеть Направленной Связи
РЕДАКТИРОВАТЬ: ЭТОТ ВОПРОС ПОД РЕФОРМАЦИЕЙ.
умысел
То, что я хочу сделать, довольно просто. У меня есть модуль Application Core, который выглядит следующим образом:
var app, application = app = angular.module('app', ['session', 'validation', 'summary', 'participants', 'ngRoute']);
... где каждая зависимость - это модуль со своим собственным $ rootScope (СМ. КОММЕНТАРИИ НИЖЕ).
Я намерен реализовать посредника, а не EventHub. EventHubs - это просто узкая талия, на которую подсистемы могут публиковать и подписываться на каналы вещания на определенном носителе. То, что я хочу, - это настоящий посредник, который, по мнению GoF, фактически управляет безопасностью того, как и где модули взаимодействуют, в одноадресной модели.
Тем не менее, я не могу полагаться исключительно на использование $rootScope.$broadcast/$emit
поскольку это позволит любому и каждому модулю прослушивать события из других модулей - без какого-либо контроля или вмешательства (посредничества) из централизованного механизма.
проблема
Проблема возникает, когда один модуль запускает событие, скажем, 'excuseFileLog'
и другие слушают 'excuseFileLog'
- пока посредник прослушивает это событие из одного модуля и отправляет его другому. Посредник прислушивается к тому, что один модуль говорит "пожалуйста, извините" FileLog "", и говорит другому, что "excuseFile был зарегистрирован". Это очень семантически, так как извините, File и Log - глагол и существительное. Поэтому, когда Посредник отправляет то же самое событие, которое он сам ожидает - мы входим в Бесконечный Цикл:
// mediator is the sole medium for channels
mediator.on('excuseFileLog', function(){
mediator.fire('excuseFileLog');
});
растворитель
Проще говоря, мне нужно иметь доступ к каждому модулю $rootScope
и запускать события только на этом модуле - надеюсь, без необходимости создания службы, которая должна быть внедрена в каждый модуль; что обременит разработчика необходимостью помнить о внедрении сервиса и создаст немного более тесную связь. Если служба задействована, то я могу также внедрить свою собственную систему посредников / событий, в отличие от использования системы событий Angular. Поскольку остальная часть команды новичок, я бы предпочел свести к минимуму "рутинную работу".
Любая помощь очень ценится:)