【发布时间】:2020-10-02 03:45:07
【问题描述】:
我需要在发送请求之前根据我的初始意图有条件地在 Angular 中的 HTTP 拦截器中执行操作。这是一个简单的抽象组合:
HttpClient发出的请求完全相同(URL、参数等),两个意图:
-
需要显示加载器的请求(例如页面更改、初始加载等)
this.http.post(url, data, config = {**someCustomParam**: true}); -
不显示加载器的请求(例如状态检查、ping 等)
this.http.post(url, data, config = {**someCustomParam**: false});
以类似的方式拦截请求结果:
@Injectable()
export class RequestInterceptor implements HttpInterceptor {
constructor(private injector: Injector) { }
public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).do((event: HttpEvent<any>) => {
if (event instanceof HttpErrorResponse) {
}
}, (err: any) => {
if(request.someCustomProperty) {
**// Do somethnig on TRUE**
} else {
**// Do somethnig on FALSE**
}
});
}
}
我面临的问题是我无法将自定义参数与我的请求一起传递并在响应到达后将其返回。以下是我目前发现的:
- 有人建议在 http.get/http.post 的配置参数中传递任何参数 - 不起作用。它只接受某些参数。
- 与后端协商以传递-返回某些内容(如标头或参数) - 在我们变得依赖后端时打破前端的分离;
- 使用装饰器/扩展 HttpClient 组件,这样我就可以传递我的参数 - 可以,但我正在寻找本机解决方案。
提前谢谢你!
【问题讨论】:
-
Oleksandr 建议的使用装饰器方法的详细实现。可能对登陆这里的人有用。 medium.com/@abidhmuhsin/… 一开始很困惑,但最终探索了这个话题并为我自己写了一个。这是代码更改最少的最佳方式。谢谢Oleksandr。
-
哇,精彩的作品!谢谢,@Abi.z
标签: angular angular-httpclient angular-http-interceptors