Наблюдаемый и субъект оба являются наблюдаемыми средствами, которые наблюдатель может отслеживать. но оба они имеют некоторые уникальные характеристики. Далее есть всего 3 типа предметов, каждый из которых снова имеет уникальные характеристики. Давайте попробуем понять каждого из них.
Вы можете найти практический пример здесь на stackblitz .
(Вам нужно проверить консоль, чтобы увидеть фактический вывод)
Observables
Они холодные: код выполняется, когда у них есть хотя бы один наблюдатель.
Создает копию данных: Observable создает копию данных для каждого наблюдателя.
Однонаправленный: наблюдатель не может присвоить значение наблюдаемому (источник / мастер).
Subject
Они горячие: код выполняется и значение транслируется, даже если нет наблюдателя.
Данные об акциях: одни и те же данные передаются всем наблюдателям.
двунаправленный: наблюдатель может присвоить значение наблюдаемому (источник / мастер).
Если вы используете использование темы, то вы пропустите все значения, которые транслируются до создания наблюдателя. Так что вот идет Replay Subject
ReplaySubject
Они горячие: код выполняется и значение транслируется, даже если нет наблюдателя.
Данные об акциях: одни и те же данные передаются всем наблюдателям.
двунаправленный: наблюдатель может присвоить значение наблюдаемому (источник / мастер). плюс
Воспроизведение потока сообщений. Независимо от того, когда вы подпишитесь на тему воспроизведения, вы будете получать все передаваемые сообщения.
В теме и воспроизведении темы вы не можете установить начальное значение на наблюдаемое. Итак, здесь идет Поведенческий предмет
BehaviorSubject
Они горячие: код выполняется и значение транслируется, даже если нет наблюдателя.
Данные об акциях: одни и те же данные передаются всем наблюдателям.
двунаправленный: наблюдатель может присвоить значение наблюдаемому (источник / мастер). плюс
Воспроизведение потока сообщений. Независимо от того, когда вы подпишитесь на тему воспроизведения, вы будете получать все передаваемые сообщения.
Вы можете установить начальное значение: Вы можете инициализировать наблюдаемое значение по умолчанию.