首页 > 解决方案 > 在 Angular 7 http.get 方法中使用 httpOptions 更改结果类型

问题描述

我对 Angular 有点陌生。我只想从 API 加载一些产品,然后创建我的类的实例(不仅仅是对我的类“成形”的对象)。所以我的 Product 类上有一个构造函数,它将复制传入的值。

这是我在服务类中的方法,效果很好。

getProductList(): Observable<Product[]> {
    return this.http
        .get<Product[]>(this.productListUrl)
        .pipe(
            map(data => data.map(item => new Product(item))),
            catchError(this.handleError));
}

但是,我还想在 GET 请求标头中传递一个令牌以进行身份​​验证。所以我在 get 方法调用中添加了一个 httpOptions 对象(在 httpOptions 中设置了授权键/值):

@Injectable()
export class ProductService {

// http options used for making API calls
private httpOptions: any;

private apiURL = environment.apiURL;
private productListUrl = this.apiURL + '/api/v1/products/';

constructor(private http: HttpClient) {
    this.httpOptions = {
        headers: new HttpHeaders({'Content-Type': 'application/json'}),
        observe: 'events'
    };
}

getProductList(): Observable<Product[]> {
    return this.http
        .get<Product[]>(this.productListUrl, this.httpOptions)
        .pipe(
            map(data => data.map(item => new Product(item))),
            catchError(this.handleError));
}

private handleError(res: HttpErrorResponse | any) {
    console.error(res.error || res.body.error);
    return observableThrowError(res.error || 'Server error');
}
}

但是不知何故,将 httpOptions 参数添加到 get 方法会导致返回类型发生变化,并且编译现在会抱怨Property 'map' does not exist on type 'HttpEvent<Product[]>'.并且不会编译。

关于我是否做错了,或者我将如何改变我使用地图的方式的任何想法?谢谢!

标签: angular

解决方案


推荐阅读