Як написати директиви (компоненти), які взаємодіють один з одним
Є в документації такий приклад https://docs.angularjs.org/guide/directive (розділ "Creating Directives that Communicate") У цьому прикладі директиви в будинок дереві розміщуються "одна в іншій", в моєму випадку будинок дерева директиви не перетинаються. Кейс: Є грид з таблицею всередині, рядки в гриді можуть додаватися і видалятися елементами управління всередині блоку, але має бути можливість винести елементи управління в довільне місце на сторінці Чи потрібно цю справу реалізовувати в директивах чи достатньо компонета? Я планую зробити грід компонентом і створення об'єкта грід винести у фабрику, в цій же фабриці буде метод який повертає вже створений грід з методами управління рядками.
Гридів на сторінці може бути кілька і для деяких я виношу елементи керування, а для деяких ні, саме тому і планую використовувати фабрику.
У цьому прикладі директиви в будинок дерева розміщуються "одна в іншій", в моєму випадку будинок дерева директив не перетинаються.
Значить, і не повинні вони взаємодіяти безпосередньо.
Схема будується так. Директива/компонент просить сервіс змінити стан, сервіс змінює стан і якимось чином тригериться цю справу (івенти, релоад стейту), відпрацьовують ресолвери та завантажують новий шматок стейту. Ця справа прокидається у компоненти через біндинги.
Тобто в ідеалі компоненти поняття не мають звідки надходить стан, і самі не змінюю його, просять сервіси це робити. Так зміни відбуваються по колу і можна організувати будь-який рівень логіки.
Мене тільки бентежить необхідність пошуку у фабриці потрібного мені гриду, тому що на сторінці їх може бути кілька. І ще хочу уточнити що означає "Ця справапрокидається в компоненти через біндинги" Виходячи з документації, компонента може запускати функції прокинуті як '&FunHandler' тобто компонента може повідомляти про свій стан, яким чином компонента може виставити своїх "слухачів" ?
Наскільки вірний підхід, якщо я в фабриці залишу посилання на методи примірника гриду та інші контролери зможуть ці методи використовувати?
Володимир: якого пошуку у фабриці? Фабрика – це спосіб створення сервісу. Ви не з фабрикою за підсумком працюєте, а з сервісом, який створює фабрика.
"Колбеки" зручні для підвищення реюзабельності компонентів. Тоді можна скинути відповідальність за виклики сервісів на компонент вищим рівнем, який займається оркестрацією. Так ми можемо зменшити зв'язаність.