我有这个问题。我正在使用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;的结果是这些:
QuestionnaireItems 位于对象中,但直接访问它将返回undefined。
您知道问题是什么,我该如何解决?
非常感谢!
答案 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)