Angular 2 - 对象属性返回为未定义但存在

时间:2017-02-07 08:13:07

标签: javascript angular typescript

我有这个问题。我正在使用Angular并调用API来获取一个内部有其他对象的对象。问题是我无法访问这些对象,因为它们是未定义的。但是,将它们记录在控制台(使用谷歌浏览器)中,对象实际上就在那里。

这些是我的代码的相关片段:

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;
    }

}

&#34; console.log(x)&#34;的结果是这些:

Resultados logging

QuestionnaireItems 位于对象中,但直接访问它将返回undefined。

您知道问题是什么,我该如何解决?

非常感谢!

2 个答案:

答案 0 :(得分:1)

您的方法getAllQuestionnaires()似乎正在返回Wrapper个对象,而不是Rootobject

在这种情况下,添加&#34; .rootobject&#34;就足够了。你的方法编辑:和修复类型,也许就像这样

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

答案 1 :(得分:0)

其正常返回值未定义。 JS很困惑,因为你想要访问数组中的数组,如果你使用它就像这个问题将要解决我猜

我在你的情况下索引1到3

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