我对此一无所知。我上下搜索了互联网,花了至少两个小时在HttpClient上查看SO答案,却一无所获。
我有这项基本服务,应该从REST端点检索一些数据
import { Injectable, Inject } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class UtilityService {
public getSavedProject() {
return this.http.get(this.baseUrl + 'api/ProjectAction/RetrieveActions');
}
}
然后此代码将用于第二个服务中,我在其中添加了以下代码
@Injectable({
providedIn: 'root'
})
export class ProjectTreeActionService {
//...
private data;
constructor(private utilityService: UtilityService) {}
getSavedProject() {
this.utilityService
.getSavedProject()
.subscribe((result) => this.data = result[0].toString() );
return this.data;
}
这是每个教程和示例中或多或少描述的最基本的行为。但是,在我的情况下,最后一行return this.data
总是给我undefined
。
我已经通过将其记录到subscribe
回调中的控制台中来检查是否正确检索了预期结果,但是我无法将值写入到需要继续使用它的类属性中
我缺少什么部分?
答案 0 :(得分:4)
理想情况下,df %>%
group_by(group) %>%
mutate(
Key = case_when(
n() > 1 ~ paste(link[1], link[n()], sep = ", "),
TRUE ~ as.character(link)
)
)
应该返回一个getSavedProject()
并包装您应该在Observable
方法内映射的值。
在这里,尝试一下:
getSavedProject()
假定此方法将在组件中使用,要提取@Injectable({
providedIn: 'root'
})
export class ProjectTreeActionService {
private data;
constructor(private utilityService: UtilityService) {}
getSavedProject() {
return this.utilityService
.getSavedProject()
.pipe(
map(result => result[0].toString())
);
}
}
方法返回的数据,您将必须getSavedProject()
至subscribe
。否则,您必须将getSavedProject()
分配给类属性,然后使用getSavedProject()
管道在组件模板中将其解包。
答案 1 :(得分:1)
您只需在呼叫方中订阅您的服务方法即可。
例如-
@Injectable({
providedIn: 'root'
})
export class ProjectTreeActionService {
private data;
constructor(private utilityService: UtilityService) {}
getSavedProject(): Observable<any> {
return this.utilityService
.getSavedProject();
}
}
,当您拥有ProjectTreeActionService
的实例时,可以在那里预订它。
this.projectTreeActionServiceInstance.getSavedProject().subscribe(result => {
//manipulate the result[0].toString() here;
});