从 HTTP GET 返回自定义对象列表以在 Angular 2 应用程序中使用

Posted

技术标签:

【中文标题】从 HTTP GET 返回自定义对象列表以在 Angular 2 应用程序中使用【英文标题】:Return a List of custom objects from an HTTP GET for use in an Angular 2 app 【发布时间】:2016-09-14 05:24:08 【问题描述】:

我试图弄清楚如何正确返回自定义对象列表并使用 html 文件打印其内容。

以下是 HTTP GET 方法的样子(为简单起见,我已经剥离了一些内容以仅说明问题):

[HttpGet("/atr/testing")]
public List<CustomObject> GetCustomObjects()

    //MasterObject.CustomObjects returns a List of CustomObjects
    return MasterObject.CustomObjects();

我的 TypeScript 文件(称为 home.ts)订阅并调用 HttpGet 方法 - Home 类如下所示(我已排除所有导入和 @Component 部分):

export class Home 
public selectedConfiguration: string = 'TESTVALUE';

constructor(private http: Http) 
    this.getConfigurations()
        .subscribe(res => 
            this.selectedConfiguration = res;
        );


getConfigurations() 
    console.log('Home:getConfigurations entered...');

    return this.http.get('atr/testing')
        .map((response) => 
            console.log(response);
            return response.json();
        );

如您所见,构造函数调用了调用 HttpGet 方法的“getConfigurations”。让我困惑的部分是如何正确使用返回的响应?根据我的理解,响应作为 JSON 字符串返回(这就是为什么 Home 类中的 selectedConfiguration 变量是字符串值而不是列表的原因)。当我尝试在我的 HTML 文件中使用 selectedConfiguration 打印出“selectedConfiguration”字符串时,我得到了这个:

[object Object],[object Object],[object Object],[object Object]

如果我在我的 HTML 中使用 selectedConfiguration[0],我只会得到一个:[object Object]

GET 方法返回的 List 应该有 4 个 CustomObject,看起来 JSON 响应至少有这个。每个 CustomObject 都有诸如“名称”、“日期”、“时间”等变量。我尝试使用 selectedConfiguration[0].Name 在我的 HTML 中打印数据,但它什么也没打印出来。我不确定从这里做什么(或者我做错了什么)以显示每个对象的信息。

【问题讨论】:

【参考方案1】:

将其作为 json 结果返回:

[HttpGet("/atr/testing")]
public JsonResult GetCustomObjects()

    //MasterObject.CustomObjects returns a List of CustomObjects
    return Json(MasterObject.CustomObjects());

【讨论】:

感谢您的回复。我更改了函数以返回 JsonResult 但它仍然不会打印。我正在使用 Chrome 的开发人员工具,响应肯定会返回 List 的 JSON 表示形式——这似乎是一个 JSON 对象。你知道我将如何访问我的 HTML 文件中 JSON 的不同部分吗? 所以你会收到一个很好的 json 作为响应。 console.log 将其显示为 [object],因为它是一个复杂的对象。要以角度循环遍历数组,您需要使用 ng-repeat。【参考方案2】:

简短的回答

在您的示例中,您尝试将 JSON 对象转换为字符串。要让它工作,你可能必须做:

this.selectedConfiguration = JSON.stringify(res);

长答案

假设您的 CustomObject 类看起来像:

public class CustomObject

    public string Name  get; set; 
    public DateTime Date  get; set; 

在您的 Angular 代码中,创建一个模仿它的界面。在开发者工具中验证大小写是否匹配(“名称”而不是“名称”):

export interface ICustomObject 
    Name: string;
    Date: Date;

利用 TypeScript 的类型检查,将返回的列表实际读取为自定义对象的数组:

export class Home implements OnInit 
  public configurations: ICustomObject[];
  public selectedConfiguration: ICustomObject;

  constructor(private http: Http) 
    // move initialization code to ngOnInit. Don't forget the import and implements
  

  ngOnInit() 
    this.getConfigurations()
        .subscribe((customList: ICustomObject[]) => 
            this.configurations = customList;
            // todo: determine the selected configuration
            this.selectedConfiguration = this.configurations[0];
        );
  

  getConfigurations(): ICustomObject[] 
    return this.http.get('atr/testing')
        .map((response: Response) => 
            return <ICustomObject[]>response.json();
        );

【讨论】:

以上是关于从 HTTP GET 返回自定义对象列表以在 Angular 2 应用程序中使用的主要内容,如果未能解决你的问题,请参考以下文章

自定义数据集,例如通用列表的容器

如何从来自 http.get 响应的对象中提取数据

将自定义JavaScript从帖子添加到

当按下 menuItem 以在 android 中显示用于列表视图的自定义适配器时,应用程序崩溃

返回具有列表的jpa中的自定义对象

Automapper 自定义解析器源成员到目标对象列表映射问题