Angular 2将我的Json对象看作一个函数

时间:2017-01-10 11:22:21

标签: json object angular typescript

我有一个通过Json将web对象放入对象中以显示它们的webapp。 我已经用服务和课程做了两次。 但是现在我复制并粘贴旧代码进行一些细微的更改,以确保它重定向到好的类,但现在我得到一个带有函数的数组,而不是带有对象的数组。

Here you see the array open in console

And here the are closed

这是我的构造函数,它调用服务类并将内容发送到控制台

constructor(private featureService : FeatureService, private scenarioservice : ScenarioService, private failuresService : FailuresService){
    //hier worden de features en failures opgehaald
    this.featureService.getFeatures().subscribe(res => {
      this.featureArray = res.getFeatureArray();
      console.log(res.getFeatureArray());
    });
      this.failuresService.getFailures().subscribe(res => {
      this.failureArray = res.getFailureArray();
      console.log(res.failures[0].method);
      console.log(this.failureArray);
    });

  }

}

这是failuresService.getFailures:

import { Injectable } from "@angular/core";
import {Http, Response} from "@angular/http";
import {Failure} from "./Failure";
import {Failures} from "./failures";


@Injectable()
export class FailuresService {
  constructor(protected http: Http) {}


  getFailures() {
    return this.http.get('http://localhost:8080/testresultaten')
      .map((response: Response) => response.json())
      .map(({failures = [Failure]}) => new Failures(failures));// deze error is bullshit
  }
}

这是我得到的Json,想要上课:

{
  "failures:": [
    {
      "method": "canRollOneGame",
      "object": "BowlingGame.GameTest"
    },
    {
      "method": "canCountNighteeneight",
      "object": "FizzBuzz.FizzBuzzTest"
    }
  ]
}

以下是失败和失败类:

import {Failure} from "./Failure";
export class Failures {

  constructor(public failures : Failure[]){}
  public getFailureArray(): Failure[]{
    return this.failures;
  }

}


export class Failure{

  constructor(public method : String , public object : String ){  }
}

3 个答案:

答案 0 :(得分:0)

我可能错了,但看起来不对:

getFailures() {
    return this.http.get('http://localhost:8080/testresultaten')
      .map((response: Response) => response.json())
      .map(({failures = [Failure]}) => new Failures(failures));// deze error is bullshit
  }

最后一次映射,我不确定它应该做什么。我从未见过这种语法(并不意味着它是错的)。我知道你有一个传入的数组。但是这个语法的作用{failures = [Failure]}就是我认为你的问题所在。我不认为这会做你的想法。

试试这个,看看会发生什么:

.map(failures => { console.log ( failures ); new Failures(failures) } );// deze error is bullshit

如果您尝试使用旧映射,然后使用这个新映射,那么查看console.log描述的内容会很有趣。我认为按照你的方式行事,你不会看到你的期望。

如果你排除了你,那么你可以尝试输入传入的有效载荷(虽然我不确定它是否会起作用;它应该从之前的映射中接收JSON)。

.map( (failures: Array<Failure>) => { console.log ( failures ); new Failures(failures) } );

答案 1 :(得分:0)

因此,如果我正确读取它:您的目标是创建一个Failure对象数组,其值来自JSON数组,其中每个对象都有一个您想在代码中执行的方法。

如果是这样,那我就明白出了什么问题。正如Tim Consolazion在评论中提到的,您只能获得Failure对象的值而不是Failure对象本身的值(请参阅custom created method error: "is not a function")。因此,为了从Failure执行命令,您必须为JSON数组中的每个对象创建一个Failure对象。像这样:

return this.http.get('http://localhost:8080/testresultaten')
  .map((response: Response) => {
      let content = response.json();
      let failureList: Failure[] = [];

      content.forEach(failure => {
                failureList.push(new Failure(failure.method, failure.object))
            });

      return failureList || {};
  }

我想知道你在哪里找到{failures = [Failure]}?我以前从未见过这个,我也不知道这是为了什么。

编辑:我编辑了问题,使其适合您的班级Failure。来自JSON数组的对象中failure中的content.forEach(failure => {。您可以像访问普通对象一样访问它的值。如果是failure.methodfailure.object

答案 2 :(得分:0)

我在Json中发现我的问题是名称是函数:但在我的代码中它是函数所以所有必要的是确保它发送函数而不是函数: