【问题标题】:Angular 4.3 Http ClientAngular 4.3 Http 客户端
【发布时间】:2017-09-28 23:49:44
【问题描述】:

请告知我如何用 Angular 4.3 的新 HttpClient 替换我拥有的现有代码。我的问题是我想进行深度解析并将服务类之外的类型化对象返回给 Component。问题在于 httpClient 我无法将 result.data 作为 UserModel 返回

旧代码

组件

 this.loginService.authenticate(this.loginModel).then(
            res => { this.userModel = res;},
            error => { this.handleError(error);}
            );

服务类

public authenticate(model: LoginModel): Promise<UserModel> {
        return this.http
            .post(this.controller, JSON.stringify(model))
            .toPromise()
            .then(response => response.json().result.data as UserModel)
            .catch(this.handleError);

    }

修订的服务类代码

public authenticate(model: LoginModel): Observable<UserModel> {
            return this.httpClient
                .post<UserModel>(this.controller, model)
                .catch(this.handleError);

        }

如何将 response.result.data 映射到 Observable 并返回。我不想从我的类中返回完整的响应对象,而只返回 json 的一部分作为类型化对象。

【问题讨论】:

    标签: angular


    【解决方案1】:

    您可以使用 rxjs 中的 map 运算符映射响应:

    public authenticate(model: LoginModel): Observable<UserModel> {
      return this.httpClient
        .post(this.controller, model)
        .map(response => response.result.data as UserModel)
        .catch(this.handleError);
    }
    

    这会将响应数据返回为UserModel

    【讨论】:

    • Editor 在 map 后显示 response.result.data 为红色
    • 那就试试(response: any) =&gt; response.result.data as UserModel
    • 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    相关资源
    最近更新 更多