第一个想法是使用HttpInterceptor
但是clone(...)
方法的签名不包含observe
选项.除了为每个请求定义 { observe: 'response' }
选项外,我还没有看到替代方案 yet ...
那么,如果有的话,是否有方法来设置 { observe: 'response' }
选项 globally,例如通过 HttpInterceptor
?
clone(update: {
headers?: HttpHeaders;
reportProgress?: boolean;
params?: HttpParams;
responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
withCredentials?: boolean;
body?: T | null;
method?: string;
url?: string;
setHeaders?: {
[name: string]: string | string[];
};
setParams?: {
[param: string]: string;
};
}): HttpRequest<T>;
最佳答案
我知道这个问题很老但是很有趣。
我考虑过重写 httpClient 方法。
您只需重写一次方法。 所有的工作都将完成。
例如 GET 方法是这样的:
overrideGetRequest() {
const httpRequest = this.http.get.bind(this.http);
this.http.get = function get<T = any>(url: string, options?: any): Observable<T> {
let requestOptions = options || {};
if(!('observe' in requestOptions)) {
requestOptions = { ...requestOptions, observe: "response" };
}
return httpRequest(url, requestOptions);
};
}
这是 Stackblitz 示例,我在其中覆盖了 httpClient 的 POST 和 GET 方法。
https://stackblitz.com/edit/angular-interceptors-kknew1?file=app%2Fapp.component.ts
关于angular - 如何设置{观察: 'response' } option globally in Angular 4. 3+?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48543244/