方法一:
如果您使用的是 Angular 4.3+,那么您可以为此创建一个interceptor,它将充当中介。
注意:为了使用拦截器,您必须使用 HttpClient 而不是 Http 服务,这是 Angular 4.3 的新增功能,它将通过 Http 服务为您提供 some benefits .
如果用户已登录,您可以在此处添加标题。
@Injectable()
export class AddHeaderInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if(UserService.getToken()){
req.headers.set('Authorization', 'Bearer ' + UserService.getToken());
}
return next.handle(req);
}
}
重要提示:不要忘记在你的应用模块中提供拦截器类。
import {HTTP_INTERCEPTORS} from '@angular/common/http';
@NgModule({
providers: [{
provide: HTTP_INTERCEPTORS,
useClass: AddHeaderInterceptor,
multi: true,
}],
})
方法2:
如果您使用的是低于 4.3.0 的版本,那么您可以采用不同的方法,例如扩展 BaseRequestOptions 以将公共标头注入所有请求。
import {BaseRequestOptions} from '@angular/http';
@Injectable()
export class AdddingHeaderOptions extends BaseRequestOptions {
constructor() {
super();
if(UserService.getToken()){
this.headers.append('X-Requested-With', 'XMLHttpRequest');
this.headers.append('Authorization', 'Bearer ' + UserService.getToken());
}
}
}
现在,您可以将其提供给应用模块文件。
@NgModule({
providers : [
{provide: RequestOptions, useClass: AdddingHeaderOptions }
]
})