Angularjs: связь директив на основе элементов

Мне нужно иметь две директивы на основе элементов.

Оба имеют свой собственный пользовательский интерфейс, поэтому я использовал ограничение: «E»

Мне нужен способ передачи данных из одной/или нескольких директив в другую

Две директивы, отправляющие данные, находятся в двух разных контроллерах (один в заголовке страницы и один в теле страницы), поэтому пытаются использовать

scope: {
    onNotify : "&"
}

просто становится грязным, так как области разные.

Лучшее, что я смог придумать, это шаблон "шины сообщений". Где я ввел третью (на основе атрибутов) директиву, которая предоставляет «api»

api = {
  addListener : function(event, fn),
  publish : function(event, data)
}

jsfiddle здесь: http://jsfiddle.net/concept/dELCv/

Мои вопросы таковы:

  1. Действительно ли это единственный способ заставить две директивы на основе элементов взаимодействовать?
  2. Объем кажется неправильным, так как мне пришлось использовать $(document).data("fc-bus.api", api) для совместного использования экземпляра API между контроллерами. Может кто-нибудь предложить лучший способ совместного использования API между контроллерами

Это работает, и я думаю, это нормально, однако на самом деле это не выглядит очень «угловатым» с API с глобальной областью видимости.

Жду всех ваших ответов и комментариев


person concept    schedule 12.03.2013    source источник


Ответы (1)


Вместо 3-й директивы создайте службу для обмена данными и $watch для изменения данных службы внутри каждой директивы.

person Gil Birman    schedule 19.02.2014