使用* ngFor Angular v5访问数组

时间:2018-01-11 11:39:32

标签: javascript arrays angular object ngfor

我在Firebase中有一些JSON数据,我正试图在Angular v5中使用* ngFor循环访问数据。

该对象如下所示:

{
    "events": [
        {
            "Event-time": "09:30",
            "Event-name": "Morning Session",
            "Location": "Alexander Room",
            "Speaker-image": "https://z4e3q7e996-flywheel.netdna-ssl.com/wp-content/uploads/2017/07/TeamPhotosIan.png",
            "Speaker-name": "Ian Broom",
            "Speaker-title": "CEO & Founder"
        },
        {
            "Event-time": "11:30",
            "Event-name": "Morning Session II",
            "Location": "Coffee Room",
            "Speaker-image": "https://z4e3q7e996-flywheel.netdna-ssl.com/wp-content/uploads/2012/07/TeamPhotosben.png",
            "Speaker-name": "Ben Wynne-Simmons",
            "Speaker-title": "Head of Growth & Marketing"
        }
   ]
}

这是我的events-list.component:

export class EventsListComponent implements OnInit {
    eventsObservable: Observable<any[]>;

    constructor(private db: AngularFireDatabase) { }

    ngOnInit() {
        this.eventsObservable = this.getEvents('/events');
    }

    getEvents(listPath): Observable<any[]> {
        return this.db.list(listPath).valueChanges();
    }
}

我正试图像这样循环:

<ul>
    <li *ngFor="let event of eventsObservable | async">
        <p>{{event.Event-name}}</p>
    </li>
</ul>

打印出来的是NaN。

我不知道如何访问和显示数据。

请帮忙!谢谢!

2 个答案:

答案 0 :(得分:1)

问题是要访问包含符号-的字段。

它被解释为数学减法(因为event.Event和name都不是数字,event.Event - name给出NaN(Notanumber)。

要访问名称中包含特殊字符的字段,您必须使用括号表示法:

<p>{{event["Event-name"]}}</p>

另外,正如其他答案所说,你必须直接迭代你的数组。我不清楚你如何在答案中得到你的观察结果。如果你从大对象中获得了一个Observable,那么你应该.map你的events字段可以观察到。

这会给你另一个可观察的,你应该迭代后者。

答案 1 :(得分:0)

您需要访问eventsObservable对象

中的数组事件
<div *ngFor="let event of eventsObservable.events | async">
        <p>{{event.Event-name}}</p>
 </div>