Angular 扩展BaseRequestOptions以设置请求的全局标头

Angular 扩展BaseRequestOptions以设置请求的全局标头,angular,Angular,我有一个扩展baserequestoptions的服务,它包括两个对所有http请求都通用的头。问题是这些头是在实例化服务时在构造函数中设置的。因此,一旦设置好它们,除非重新加载页面,否则它们不会更改(假设:所有代码、组件、服务等都在浏览器刷新时重新创建) 为了解决这个问题,我添加了一个public方法setHeader(),如果我可以获得DefaultRequestOptions的实例,我可以从其他组件/服务调用它,这样我就可以调用getHeader()方法 现在,我不知道如何获取Defaul

我有一个扩展
baserequestoptions
的服务,它包括两个对所有http请求都通用的头。问题是这些头是在实例化服务时在构造函数中设置的。因此,一旦设置好它们,除非重新加载页面,否则它们不会更改(假设:所有代码、组件、服务等都在浏览器刷新时重新创建)

为了解决这个问题,我添加了一个
public方法setHeader()
,如果我可以获得
DefaultRequestOptions
的实例,我可以从其他组件/服务调用它,这样我就可以调用
getHeader()
方法

现在,我不知道如何获取
DefaultRequestOptions
的实例。 另外,是否可以使用rxjs observables自动更新DefaultRequestOptions类中的头文件

import { Injectable } from '@angular/core';
import { BaseRequestOptions, RequestOptions } from '@angular/http';

@Injectable()
export class DefaultRequestOptions extends BaseRequestOptions {

constructor() {
 super();

// Set the default 'Content-Type' header
this.headers.set('Content-Type', 'application/json');
// Set the default 'Authorization' header
this.headers.set('Authorization', 'oh god');
}

public setHeader(header: string, value: string){
 this.headers.set(header, value);
}

}

export const requestOptionsProvider = { provide: RequestOptions, useClass: DefaultRequestOptions };

听起来您混淆了默认头和每个请求头。就像你说的,你改变了默认的标题,就这样了。现在,您可以通过在请求时传递新的头来更改任何特定请求的头。如果您发现自己在一次又一次地更改标题,那么您可以将所有请求包装到一个自定义服务中,并在此服务中为一组请求设置一次标题。@AngularFrance,但您认为这是正确的方法吗?在每次通话中重复该代码。创建自定义服务怎么样?
subscribe()
方法在哪里?在
myModel.service
或“MyOverrideHttp.service,我们可以链接可观察对象吗?”中,感谢您的知识。这实际上取决于您试图实现的目标:如果您需要更改应用程序中所有/大多数请求的标题,请覆盖
RequestOptions
。如果只需要更改几个请求的标题,请覆盖每个请求选项。创建自定义服务也是一个不错的选择。在任何情况下,始终在最后一个可能的时刻(即,当您实际需要使用数据时)订阅,而不是在服务中获取或转换数据。