我刚刚开始Angular开发,已经遇到了第一个问题。我在基础方面苦苦挣扎,我知道... 我有一个后端,必须使用某些HttpHeader(project-id)调用它,然后才能调用http.get API。
我不想使用httpInterceptor,因为我不想将此标头添加到所有请求中。
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
})
};
@Injectable()
export class OpenbatonService {
constructor(private http:HttpClient) {
this.http.get(API_URL+'/api/v1/projects').subscribe((nsr)=> {httpOptions.headers.append('project-id',nsr[0].id)});
}
getAllNsrs(): Observable<any> {
console.log("Executed before constructor is resolved")
return this.http.get(API_URL+'/api/v1/ns-records', httpOptions);
}
所以我要实现的是从API获取projectId值,并将其用于所有针对OpenbatonService的请求,而不是用于OtherService。
答案 0 :(得分:0)
您可以将projectId
值传递给该服务,然后仅将append
的值传递给httpOptions
,然后再进行实际的this.http.get()
调用。
我将projectId
设为可选,以防其他getAllNsrs()
调用无法通过。
const httpOptions: HttpHeaders = { //<=== I'm just adding HttpHeaders type here
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
};
getAllNsrs(projectId?: string): Observable<any> { //<====Pass projectId
if (projectId) {
httpOptions = httpOptions.append('myProjectId', projectId);
}
return this.http.get(API_URL+'/api/v1/ns-records', httpOptions);
}