Я создал dropdownToggle
директиву и имеет такие функции, как:Повторное использование функций директивы в другой директиве
toggle()
isOpen()
open()
close()
closeAll()
Все они прекрасно работают только теперь у меня есть небольшая проблема. Мне нужно вызвать функцию closeAll()
из другой директивы.
Причиной является то, что в моей основной области контента включен прослушиватель событий click
, который должен закрыть все открытые панели раскрытия/меню в настоящее время.
Как это можно достичь? Я думал о том, чтобы переместить все эти функции в service
, но я предпочел бы, если возможно, манипулировать DOM в директивах.
Вам не нужно выделять/транслировать из rootScope, так как директивы также имеют доступ к области. – link
Директивы могут - в общем случае - размещаться в любом месте иерархии. Их области могут быть братьями и сестрами, и в этом случае '$ emit'-ing /' $ broadcast'-ing не будет передавать событие. 'emit'-ing на' $ rootScope' достигает 2-х вещей: все они получают сообщение, так как существует только один '$ rootScope', и существует минимальное количество областей видимости, что позволяет свести к минимуму штрафы за производительность (' $ emit'- ing/'$ broadcast'-ing в любой другой внутренней области затронет либо его родителей, либо своих детей, а' $ rootScope' не имеет родителей, чтобы пересылать событие '$ emit'-ed, поэтому он остается там. –
Вы правы, я не думал о случае братьев и сестер. – link