Angular HttpHeaders从HTTP req

时间:2019-01-07 14:10:37

标签: angular typescript angular6

我刚刚开始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。

1 个答案:

答案 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);
}