2017-02-07 2 views
1

この問題が発生しています。私はAngularを使って、他のオブジェクトを内部に持つオブジェクトを取得するためにAPIを呼び出しています。問題は、それらが未定義として返されるため、それらのオブジェクトにアクセスできないことです。しかし、それらをコンソール(Google Chromeで)に記録すると、オブジェクトは実際にそこにあります。角2 - オブジェクトプロパティは未定義として返されますが、存在します。

これらは、私のコードの関連する断片である:

questionnaire.component.ts

export class QuestionnaireComponent extends BaseComponent { 

    questionnaires: Models.Survey.Rootobject; 
    ... 
    ngOnInit() { 

     ...do stuff... 

     Observable.forkJoin(this.service.getAllQuestionnaires()) 
     .subscribe(res => { 

      this.questionnaires = res[0]; 

      console.log(this.questionnaires); 
      console.log(res[0]); 
      console.log(this.questionnaires.questionnaireItems); 

      this.numberOfQuestionnaires = this.questionnaires.questionnaireItems.length; 

      ...do more stuff... 

     }); 
    } 
    ... 
} 

questionnaire.service.ts

...code... 

getAllQuestionnaires() { 

    return this.http.get<Models.Survey.Rootobject>('/api/v1/xmlquestionnaires').map(res => res[0]); 
} 

Survey.tsを

declare namespace Models.Survey { 

    ...more interfaces... 

    export interface QuestionnaireItem { 
     id: string; 
     name: string; 
     order: string; 
     description: string[]; 
     finalText: string[]; 
     questionGroups: QuestionGroup[]; 
     questions: Question[]; 
     toRandomize: string; 
    } 

    export interface Rootobject { 
     questionnaireItems: QuestionnaireItem[]; 
    } 

    export interface Wrapper { 
     rootobject: Rootobject; 
    } 

} 

の結果 "はconsole.log(x)は" これらは以下のとおりです。

Resultados logging

QuestionnaireItemsオブジェクトであるが、それに直接アクセスすると、未定義が返されます。

問題の原因と解決方法をご存知ですか?

ありがとうございました!

答えて

1

3に見えるあなたのケースで、私は

I指数を推測解決するために起こっているこの問題のようにそれを使用する場合、配列で、配列にアクセスしたいので、JSは混乱していますRootobjectの代わりにWrapperオブジェクトです。

このような場合、あなたの方法EDITに「.rootobject」を追加するのに十分である:とタイプを修正し、多分こののように:

getAllQuestionnaires() { 
    return this.http 
     .get<Models.Survey.Wrapper>('/api/v1/xmlquestionnaires') 
     .map(res => res[0].rootobject); 
} 
+0

これは、このエラーが表示されますので、 'Rootobject'を返すと思う:http://imgur.com/a/YnCdH – AMarquez94

+0

" http "はangular2によって提供される標準サービスですか? getのような明示的な型定義でそれを使用していない(...)これまでのところ私は少し驚いています。通常はget(...)。map(respone => response.json())を使用します。 –

+0

Arg、これはエラーとは信じられません。どうもありがとうございました!私は 'Models.Survey.Wrapper 'を取得して*コンポーネント*にあるオブジェクトを変更して、これを' this.questionnaires = res [0] 'に変更したあなたの答えに従った:' this.questionnaires = res [ 0] .rootobject'。 – AMarquez94

0

通常の戻り値は未定義です。あなたはgetAllQuestionnaires()が戻っているあなたの方法のように1

console.log(this.questionnaries[i].questionnaireItems) 
+0

this.questionnaires'は ':(動作しませんでした例えば ​​'res [0] [1]'にアクセスしようとすると、 'res [0]'がまだ定義されていないのでエラーが発生します(この場合、 'Rootobject'は配列ではありません)。 – AMarquez94

+0

申し訳ありません私の悪い:/ – ckarabay

関連する問題