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
。如果只需要更改几个请求的标题,请覆盖每个请求选项。创建自定义服务也是一个不错的选择。在任何情况下,始终在最后一个可能的时刻(即,当您实际需要使用数据时)订阅,而不是在服务中获取或转换数据。