Дочерний компонент получает данные из @Input или Service Subscription? Что лучше?

У меня есть родительский компонент, дочерний компонент и служба. Родительский компонент подписывается на данные объекта из сервиса. Дочерний компонент также должен прослушивать это изменение данных. Что лучше, дочерний компонент получает данные от своего родителя с помощью @Input или позволяет ему также подписаться на сервис?


person Emmanuel Sayson    schedule 29.01.2020    source источник
comment
Тебе решать. Основное различие между передачей данных с помощью @Input вместо Subject (или BS) заключается в том, что у вас есть контроль над обновлением дочернего компонента.   -  person Jacopo Sciampi    schedule 29.01.2020
comment
better нет. Просто выберите то, что вы предпочитаете.   -  person Carsten    schedule 29.01.2020
comment
Предполагая, что родитель является интеллектуальным компонентом, а дочерний компонент — немым компонентом (и в идеале повторно используемым), вы должны использовать @Input, потому что маловероятно, что вы хотите, чтобы дочерний элемент имел доступ к другим методам в вашей службе.   -  person Andrew Allen    schedule 29.01.2020


Ответы (3)


Примеры использования @Input()

  1. Когда у нас есть только одна-две иерархии
  2. Когда значение, которое мы передаем, используется другими компонентами

Примеры использования службы

  1. Когда у нас много иерархии и передача значений становится немного сложной
  2. Когда некоторые функции компонента зависят от некоторого значения компонента, которое может быть примерно на 10 иерархий ниже, поэтому в этом случае мы можем использовать подписку на сервис, чтобы всякий раз, когда значение изменяется, мы могли автоматически использовать его в нашем компоненте.
  3. Когда значение используется более чем одним компонентом
person Gvs Akhil    schedule 29.01.2020

Если служба предоставляет точные данные в желаемом формате, то подписка на службу напрямую лучше, чем зависимость от родительского компонента. Это уменьшит общую сложность кода, а также улучшит производительность.

Родительский компонент можно использовать в качестве оболочки или прокси-сервера в следующих сценариях:

  1. Служба не предоставляет данные в точном формате, требуемом дочерними компонентами.

  2. Многие дочерние компоненты полагаются на одни и те же данные, предоставляемые службой.

  3. Дочернему компоненту нужны данные, собранные из нескольких сервисов.

person Gopinath    schedule 29.01.2020

@Emmanuel Sayson Это зависит от варианта использования, если вы не обновляете данные для родителя, тогда лучше использовать сервис. Служба более понятна во вложенной иерархии

person Deepak Patidar    schedule 29.01.2020