我正在尝试一段时间,但无法正常工作。
我正在尝试遍历对象中的数组(已导入接口):
export interface Ex {
_id: string;
name: string;
tags: [
{
label: string,
count: number,
updateInfo: [
{
date: string,
delay: number,
}
],
}
];
}
基本上,我正在尝试将所有标签标签放入字符串数组中。
getTags(): void {
for (let tag in this.ex.tags) {
this.tags.push(tag.label)
}
}
或类似这样:
getTags(): void {
this.ex.tags.forEach(tag => {
this.tags.push(tag.label);
});
}
但是我得到了错误:
core.js:6228错误TypeError:无法读取未定义的属性“标签”
答案 0 :(得分:0)
您已定义tags
,但尚未实例化/或未分配给它:
将该属性添加为:
tags = [];
或
tags = new Array<string>();
应解决该问题。
此外,您可以略微简化逻辑:
this.tags = this.exTags.tags.map(x => x.label);
export class AppComponent implements OnInit {
name = 'Angular ' + VERSION.major;
getTags() :Observable<Ex>{
return new Observable(ob => {
setTimeout(() => {
ob.next({
id :"a",
name: "a name",
tags: [
{
label:"a label",
count:1,
updateInfo: [
{
date: new Date().toString(),
delay:5
}
]
},
{
label:"b label",
count:1,
updateInfo: [
{
date: new Date().toString(),
delay:5
}
]
}
]
})
},1000)
})
}
exTags: Ex;
tags = new Array<string>();
ngOnInit(){
this.getTags().subscribe(s => { this.tags = s.tags.map(x => x.label)});
}
}
export class Tag{
label: string;
count: number;
updateInfo: [
{
date: string,
delay: number
}
]
}
export interface Ex {
id: string,
name: string,
tags: Tag[]
}
修改
由于具有可观察对象,因此需要等待get请求完成。我在异步对象上模拟了一个网络超时的超时(更新了Stackblitz)
那么您所需要做的就是调用AJAX / Observable上的subscription方法:
this.getTags().subscribe(s => { this.tags = s.tags.map(x => x.label)});