ПРИМЕЧАНИЕ. Для простоты рассмотрите глубину компонента как:
- Smart (grand)parent level 0
- dumb child level 1
....
- dumb grandchild level 2
....)
Существуют различные варианты и условия взаимодействия между интеллектуальными/грандиозными/родительскими/дочерними компонентами и передачей данных вверх и вниз по цепочке MULTI-LEVEL (не менее 3-х уровней). Мы хотели бы, чтобы наш "умный" (грандиозный) родительский компонент был единственным компонентом, который имеет доступ к нашей службе данных (или атомному/неизменяемому магазину), и это приведет к обмену информацией с "немыми" (большими) детьми. Возможные варианты:
-
Анти-шаблон (?): Передача данных вниз и вверх по цепочке компонентов с помощью @Input/@Output bindings. Это то, что некоторые называют проблемой "посторонних свойств" или "проблема барботирования пользовательских событий" (например, здесь и здесь.). Нет. - Анти-шаблон: доступ к интеллектуальным компонентам для немых (больших) детей через @ViewChildren или @ContentChilden. Это снова затрудняет работу детей и по-прежнему не создает чистого механизма для (больших) детей для передачи данных UP к интеллектуальному компоненту.
- Общая служба сообщений, описанная в кулинарной книге angular.io здесь, и отличный пост здесь.
- ?
Теперь в случае "3" у немых (грандиозных) детей должна быть введена служба сообщений. Это подводит меня к моим вопросам:
Q1: Кажется интуитивно странным для каждого из "немых" (внушительных) детей, чтобы вставлять сообщение. Является ли наилучшей практикой для службы сообщений быть специализированным сервисом для этого семейства или делает ли это копирование службы данных, которую "умный" дед и бабушка обвиняется в упомянутом выше?
Q1A: Кроме того, как это намного лучше, чем добавление привязок @Input/@Output вверх и вниз по цепочке, если у всех компонентов будет введенная услуга? (Я вижу аргумент, что "немой" компонент нуждается в некотором способе получения информации)
Q2: Что, если "умный" великий родитель общался с магазином, подобным редуксу (ngrx для нас)? Опять же, общение с "немыми" компонентами лучше всего происходит с помощью службы ввода/выделенного сообщения или лучше всего вводить хранилище в каждый "немой" компонент... или? Обратите внимание, что межкомпонентная связь представляет собой комбинацию "действия" (например, подтверждение формы, кнопка отключения и т.д.) В дополнение к данным (например, добавление данных в /update store или service).
Мысли очень оценили!