Как написать директивы(компоненты) которые взаимодействуют друг с другом?

Есть в документации вот такой пример https://docs.angularjs.org/guide/directive (раздел "Creating Directives that Communicate")
В этом примере директивы в дом дереве размещаются "одна в другой", в моем случае дом деревья директив не пересекаются.
Кейс: Есть грид с таблицей внутри, строки в гриде могут добавляться и удаляться элементами управления внутри блока, но должна быть возможность вынести элементы управления в произвольное место на странице
Нужно ли это дело реализовывать в директивах или достаточно компонета ?
Я планирую сделать грид компонентом и создание объекта грида вынести в фабрику, в этой же фабрике будет метод который возвращает уже созданный грид с методами управления строками.

Гридов на странице может быть несколько и для некоторых я выношу элементы управления а для некоторых нет, именно поэтому и планирую использовать фабрику.
  • Вопрос задан
  • 221 просмотр
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
В этом примере директивы в дом дереве размещаются "одна в другой", в моем случае дом деревья директив не пересекаются.


Значит и не должны они взаимодействовать напрямую.

Схема строится так. Директива/компонент просит сервис изменить состояние, сервис меняет состояние и каким-то образом тригерится это дело (ивенты, релоад стэйта), отрабатывают ресолверы и загружают новый кусок стэйта. Это дело прокидывается в компоненты через биндинги.

То есть в идеале компоненты понятия не имеют откуда приходит состояние, и сами не меняю его, просят сервисы это делать. Так изменения проходят по кругу и можно организовать любой уровень логики.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
EreminD
@EreminD
Кое-что умею
Пройдите на codeacademy курс по ангуляру. Там, в числе прочего, отрабатывается создание директив
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 12:20
10000 руб./за проект
22 нояб. 2024, в 11:53
3000 руб./за проект
22 нояб. 2024, в 11:51
20000 руб./за проект