我从api获取了大量客户数据,我想将其缓存在我的服务中,因此不同的组件可以访问从数据返回不同查询的函数,而不会产生多个http请求,因为数据只是每月更新。这样的事情。
data;
getData() {
if (this.data)
return Observable.of(this.data);
return this.http.get(***********)
.map(response => {
this.accounts = response;
return this.accounts;
});
然后我在服务中有函数组件可以调用以获取特定数据,以正确的形状显示在表格等
getDataForSomethingById(id) {
return this.getData()
.map(result => {
//get the data into the right shape
);
在组件中......
this.dataService.getDataForSomethingById(1)
.subscribe(result => this.tableData = result);
问题是组件可能在初始化时调用许多这些函数,导致多个http调用(仅在收到响应之前所有订阅的第一次)。 我的问题是,我是以正确的方式来做这件事的吗?服务是否是此逻辑的正确位置,或者该逻辑应该在我的组件中,例如
this.dataService.getData()
.subscribe(result => {
this.tableData = this.processTable(result);
this.someListData = this.getListData(result);
或者我可以在服务中以某种方式做这样的事情
//Initialize this as an observable the the functions can wait until it loads?
data;
// call this on login to get the data
getData() {
if (this.data)
return Observable.of(this.data);
return this.http.get(***********)
.map(response => {
this.accounts = response;
return this.accounts;
});
getDataForSomethingById(id) {
//wait for the data to load
//process the data
//return it to the component
}
只是在我写作时考虑这个问题,我倾向于显示数据的组件应该负责将其设置为正确的形状,而服务应该只是获取/缓存原始数据?
答案 0 :(得分:0)
例如,你需要使用你的服务来查询api,然后缓存数据,我在服务中也要做的就是以我的应用程序的标准格式映射数据,如果组件需要这些数据,它可以以该格式请求它,然后它可以以自定义格式映射它。