У меня есть родительский компонент, дочерний компонент и служба. Родительский компонент подписывается на данные объекта из сервиса. Дочерний компонент также должен прослушивать это изменение данных. Что лучше, дочерний компонент получает данные от своего родителя с помощью @Input или позволяет ему также подписаться на сервис?
Дочерний компонент получает данные из @Input или Service Subscription? Что лучше?
Ответы (3)
Примеры использования @Input()
- Когда у нас есть только одна-две иерархии
- Когда значение, которое мы передаем, используется другими компонентами
Примеры использования службы
- Когда у нас много иерархии и передача значений становится немного сложной
- Когда некоторые функции компонента зависят от некоторого значения компонента, которое может быть примерно на 10 иерархий ниже, поэтому в этом случае мы можем использовать подписку на сервис, чтобы всякий раз, когда значение изменяется, мы могли автоматически использовать его в нашем компоненте.
- Когда значение используется более чем одним компонентом
Если служба предоставляет точные данные в желаемом формате, то подписка на службу напрямую лучше, чем зависимость от родительского компонента. Это уменьшит общую сложность кода, а также улучшит производительность.
Родительский компонент можно использовать в качестве оболочки или прокси-сервера в следующих сценариях:
Служба не предоставляет данные в точном формате, требуемом дочерними компонентами.
Многие дочерние компоненты полагаются на одни и те же данные, предоставляемые службой.
Дочернему компоненту нужны данные, собранные из нескольких сервисов.
@Emmanuel Sayson Это зависит от варианта использования, если вы не обновляете данные для родителя, тогда лучше использовать сервис. Служба более понятна во вложенной иерархии
@Input
вместоSubject
(или BS) заключается в том, что у вас есть контроль над обновлением дочернего компонента. - person Jacopo Sciampi   schedule 29.01.2020better
нет. Просто выберите то, что вы предпочитаете. - person Carsten   schedule 29.01.2020