angular - 在泛型方法上使用标头时需要创建自定义 Observable
问题描述
我已经创建了一个像这样的通用服务。
common.ts
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { HttpClient, HttpHeaders } from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class CommonService {
constructor(private http: HttpClient) { }
post(url: string, params: any): Observable<any> {
return new Observable(observer => {
const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' }) };
this.http.post(url, params, httpOptions)
.subscribe(response => {
observer.next(response);
observer.complete();
}, (err) => {
observer.error(err);
});
});
}
}
我的服务.ts
book(data: Spa): Observable<any> {
return this.commonService.post(`${environment.apiURL}/my/v3/my.json`, data);
}
页面.ts
book() {
this.myService.book(spa).subscribe((res: any) => {
}, error => { console.log(error); });
}
}
问:我需要创建自定义Observable
onpost()
方法吗?既然this.http.post(url, params, httpOptions)
返回Observable
希望我不需要Observable
再次创建自定义(即common.ts
)?
注意:以上工作正常,但没有错误。
解决方案
函数 post 返回一个 observable ,如果你想要它可以输入,那么你不需要创建另一个 observable ,你可以简化如下:
post(url: string, params: any): Observable<any> {
const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' }) };
return this.http.post(url, params, httpOptions);
}
推荐阅读
- javascript - 如何更改 Google Maps API 绘图层控件中使用的默认标记
- java - 如何在 Vaadin 8 中创建对话窗口?
- c# - 从类获取数据到控制器
- amazon-web-services - 什么是 Azure SignalR 服务的 AWS 完美替代品?
- express - 无论我使用错误处理程序从 express 发送什么错误,都会得到错误代码 500?
- c++ - C++:在子类中扩展静态 STL 容器/映射成员?
- python - Pandas Dataframes,如何摆脱每个特定列或索引的 NaN 和重复项?
- jquery - 创建一个可以判断 YouTube 频道是否直播的 Jquery 函数
- python - 解释此解决方案中生成零矩阵的时间和空间复杂度
- python - 熊猫中的 where 语句