当前位置: 首页 > 知识库问答 >
问题:

如何将http.get的响应映射到Angular 2中类型化对象的新实例[duplicate]

袁增
2023-03-14

我试图理解如何使用http.get和Angular 2中的Observables将服务调用的结果映射到对象。

看看这个普朗克

我希望返回一个可观察的类型的人的方法。然而!我无法访问属性fullName。我猜想我将不得不创建一个类的新实例,并使用类构造函数将响应映射到这个新对象。但是你如何在方法中做到这一点?

import {Injectable} from '@angular/core';
import {Http, Response} from '@angular/http';
import {Observable} from 'rxjs/Rx';

export class PersonWithGetProperty {
  constructor(public firstName: string, public lastName: string){}

  get fullName(): string {
    return this.firstName + ' ' + this.lastName;
  }
}

@Injectable()
export class PersonService {
    constructor(private http: Http) {
    }

    getPersonWithGetProperty(): Observable<PersonWithGetProperty> {
        return this.http.get('data/person.json')
         .map((response: Response) => <PersonWithGetProperty>(response.json()));
    }
}

共有1个答案

姬坚成
2023-03-14

问题是您强制解析的json执行类的行为。

应用

幸运的是,您已经完成了一半,只需在解析输出后添加另一个map

@Injectable()
export class PersonService {
    constructor(private http: Http) {
    }

    getPersonWithGetProperty(): Observable<PersonWithGetProperty> {
        return this.http.get('data/person.json')
         .map((response: Response) => response.json())
         .map(({firstName, lastName}) => new PersonWithGetProperty(firstName, lastName));
    }
}

编辑

为此,您需要确保您正在使用RxJS 5:

import 'rxjs/add/operator/map'

如果您想要未来的安全,您应该使用RxJS 5更高版本中引入的管道语法

// Either
import {map} from 'rxjs/operators'

return this.http.get('data/person.json').pipe(
  map((response: Response) => response.json()),
  map(({firstName, lastName}) => new PersonWithGetProperty(firstName, lastName))
);

 类似资料:
  • 我试图使用http://modelmapper.org/表示DAO和模型类的库- 模型类- 道类- 公共类主题{私有字符串名称; 映射逻辑 ModelMapper似乎不起作用,它给我提供了主题类项目,而不是主题模型类项目

  • 我必须用不同的键和值将rest模板响应映射到我的DTO。目前我正在从rest api获得这个json响应 我想将其映射到我的 DTO 中,以便能够保存到数据库中 我想要的是只获得相同的动态密钥,以匹配上述api的响应。目前我正在这样做,但似乎我没有设置相同键的正确值。 执行此操作后,我的数据库中出现空值。

  • 问题内容: 我正在尝试将JSON文件映射到类对象,然后根据新接收的JSON更新卡。 我的JSON结构是这样的 我的班级看起来像这样: 如何将JSON文件中的值映射到CardInfo类创建的对象的字段中? 更新资料 以下试用版在 ci.description上 打印为null ,是否表示从未创建该对象? 更新2 打印cardInfo给出以下内容: {$ class:FirstCard,id:1,说明

  • 在使用HBase和Parquet时,我编写了从HBase获取值并将值映射到对象类的代码,但在使用Dataset复制Parquet时遇到了问题。 HBase: 我将数据从拼花地板读入数据集,但simple无法复制上述方法。 我只需要知道如何映射

  • 我正在使用一个简单的Java命令行,需要将log4j插入到我的应用程序中,因此我遵循本教程: http://veerasundar.com/blog/2009/07/log4j-tutorial-adding-log4j-logging-to-your-project/ 因此,我完成了以下步骤: > 我将log4jjar文件放入我的项目库中。 我把log4j放进去了。属性转换为配置包,我使用以下最

  • 问题内容: 我在了解如何实现这一目标方面遇到了问题。 基本上我们有一个API,用户发送以下格式的JSON :(如果代码不完美,请原谅,但您可以理解) 好的,我不确定我是否正确设置了JSON格式,但是现在这是我的问题。 我有一个带有参数Name,Last的类,还有一个作为其成员之一的对象Client和Property Date。 像这样: 因此,基本上,我不确定如何获取JSON,然后将其映射到我的对