typing: share data from a single instance service among many components

I'm creating a service that will extract data from the server, then upload it to a property for later use, and then notify all the components that the service is "ready." The idea of ​​loading data in a property is so that the components can consult them synchronously (through some methods)
The problem I have is that each component triggers a new http call.

So, the question is how can I just make an http request and then notify all the participants when the data is "ready"?

@Injectable ({
providedIn: & # 39; root & # 39;
})
Export class TypelistService {
private readonly baseURL = `$ {environment.myEndpoint} / api / typelist`;
Private list: Type[];
iSeeYou private: observable;
constructor (private http: HttpClient) {
console.log (& # 39; Hello Constructor & # 39;); // <-- this line execute only once as expected
        this.iSeeYou = new Observable((observer) => {
observer.next ({status: & # 39; calling & # 39;});
this.http.get (this.baseURL) .subscribe ((data: Type[]) => {
this.list = data;
observer.next ({status: & # 39; ready & # 39;});
observer.complete ();
});
});
}

init (): observable {
return this.iSeeYou;
}
getAllTypes () {
returns this.list;
}
getItemById (id: number): Enter {
leave the article: TypeError;
this.list.forEach ((i) => {
if (i.id === id) {
item = i;
}
});
Return object;
}
getItemByName (name: string): Type {
leave the article: TypeError;
this.list.forEach ((i) => {
if (i.name === name) {
item = i;
}
});
Return object;
}
}