2017-02-07 75 views
1

我遇到此問題。我正在與Angular合作,並調用一個API來獲取其中有其他對象的對象。問題是我無法訪問這些對象,因爲它們以未定義的方式返回。但是,將它們記錄在控制檯(使用Google Chrome)時,對象實際上就在那裏。Angular 2 - 對象屬性返回爲undefined,但它們存在

這是我的代碼的相關片段:

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

看起來像你的方法getAllQuestionnaires()正在恢復訪問數組中的數組一個Wrapper對象而不是Rootobject

在這種情況下,就足夠了「.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提供的標準服務?I沒有像get一樣使用顯式類型定義(...)到目前爲止,我對此有點驚訝。通常我使用get(...)。map(respone => response.json())。 –

+0

Arg,不敢相信這是錯誤。非常感謝你!我跟着你的回答改變了我得到的'的對象,並在*組件*中改變了這個:'this.questionnaires = res [0]'this this:'this.questionnaires = res [ 0] .rootobject'。 – AMarquez94

0

它的正常返回值是未定義的。 JS是困惑,因爲你想,如果你使用這樣的問題是要解決我猜

I指數在你的案件1至3

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

沒有工作:('this.questionnaires'是對象(在這種情況下,是一個'Rootobject',而不是一個數組),如果我嘗試訪問'res [0] [1]',它會導致一個錯誤,因爲res [0]還沒有定義。 – AMarquez94

+0

對不起我的壞:/ – ckarabay

相關問題