在 "getter" 方法 Angular 7 服务中从 HttpGet 请求获取结果
Get result from HttpGet Request in "getter" method Angular 7 service
这可能非常简单,但 Angular 并不是我的强项,而且我花费的时间比我预期的要多一些。我有一个调用外部 API 的服务,我想在应用程序初始化时获取变量并在多个其他组件中使用它。
我有以下服务:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class DatabaseConnectionService {
API_URL: string = "http://localhost:4044";
apiResult;
constructor(private http: HttpClient) {
this.dbConn.getApiRoot()
.subscribe(
data => this.apiResult = { message: data['message'] }
);
}
getApiRoot() {
return this.http.get<Apiroot[]>(this.API_URL);
}
returnApiResult() {
return this.apiResult;
}
}
在任何其他组件中,我需要能够调用 returnApiResult()
并获取变量的值,但它 returns 为空,因为它是一个可观察的(我认为应该已经分配了,因为它在服务的构造函数中)。感谢任何帮助。
在您的构造函数中,像这样更改代码:
import { shareReplay } from 'rxjs/operators';
//...
constructor(private http: HttpClient) {
this.apiResult = this.dbConn.getApiRot().pipe(shareReplay());
}
通过使用shareReplay
运算符,它将在多个订阅者之间共享结果,并重放结果。这样,您的组件仍然可以订阅:
this.service.apiResult.subscribe(() => console.log("Done"))
但是数据只需要在应用程序加载时由服务加载一次
这可能非常简单,但 Angular 并不是我的强项,而且我花费的时间比我预期的要多一些。我有一个调用外部 API 的服务,我想在应用程序初始化时获取变量并在多个其他组件中使用它。
我有以下服务:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class DatabaseConnectionService {
API_URL: string = "http://localhost:4044";
apiResult;
constructor(private http: HttpClient) {
this.dbConn.getApiRoot()
.subscribe(
data => this.apiResult = { message: data['message'] }
);
}
getApiRoot() {
return this.http.get<Apiroot[]>(this.API_URL);
}
returnApiResult() {
return this.apiResult;
}
}
在任何其他组件中,我需要能够调用 returnApiResult()
并获取变量的值,但它 returns 为空,因为它是一个可观察的(我认为应该已经分配了,因为它在服务的构造函数中)。感谢任何帮助。
在您的构造函数中,像这样更改代码:
import { shareReplay } from 'rxjs/operators';
//...
constructor(private http: HttpClient) {
this.apiResult = this.dbConn.getApiRot().pipe(shareReplay());
}
通过使用shareReplay
运算符,它将在多个订阅者之间共享结果,并重放结果。这样,您的组件仍然可以订阅:
this.service.apiResult.subscribe(() => console.log("Done"))
但是数据只需要在应用程序加载时由服务加载一次