Я бы не стал хранить Observable
как собственность службы;это меньше связано с ссылочными типами, как вы упомянули, и больше с дизайном Observable
s в целом.
То, что вы делаете, не обязательно плохо;однако Observable
- это контракт, который запускается только при подписке.Observable
, возвращаемое http.get
, - это то, что присваивается вашей службе как собственность;если он никогда не был подписан, никакие http-вызовы не выполняются ... но если три компонента подписываются на этот Observable
, будут сделаны три отдельных http-вызова.
Observable
, возвращаемый из HttpClient
, является холодной, конечной наблюдаемой.Это означает, что он выдаст одно значение и затем отправит сигнал unsubscribe
.Если компонент знает это и хочет получить данные только один раз, почему бы просто не вернуть Observable
, созданный из http.get
напрямую?Таким образом, вызывающая сторона может использовать любое количество Observable
операторов на Observable
, не затрагивая другие компоненты, пытающиеся получить то же значение.
Наличие Observables
в качестве свойства Services (вместо простого возвратановые в методах) действительно имеет смысл для некоторых вещей, но вместо Observables
они обычно Subjects
.Вот и вся философия дизайна, лежащая в основе государственного управления ngrx-store.Но для холодного, конечного Observables
, просто верните Observable
вызывающему.