Это даст вам нужные вам события.
import { Component, OnInit, OnDestroy } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Subscription } from 'rxjs';
@Component({
selector: 'app-home-page',
templateUrl: './home-page.component.html',
styleUrls: ['./home-page.component.css']
})
export class HomePageComponent implements OnInit, OnDestroy {
showSplash = true
events = [];
subscription: Subscription;
constructor(private http: HttpClient) {}
ngOnInit() {
this.subscription = this.http.get("/events").subscribe(data => {
this.events = data;
this.showSplash = false;
});
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
Вам нужно будет реализовать дочерний компонент (EventComponent
, вероятно, с селектором app-event
), который будет принимать объект события как @Input
собственность.Затем в вашем шаблоне HomePageComponent
вы можете циклически проходить через такие события:
<div *ngFor="let event of events">
<app-event [event]="event"></app-event>
</div>
В качестве альтернативы :
Вы можете использовать канал async
в вашемШаблон HomePageComponent
, чтобы вручную отказаться от подписки на подписку.Ваш HomePageComponent
код класса изменится на:
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-home-page',
templateUrl: './home-page.component.html',
styleUrls: ['./home-page.component.css']
})
export class HomePageComponent implements OnInit {
events$;
constructor(private http: HttpClient) {}
ngOnInit() {
this.events$ = this.http.get("/events");
}
}
А затем в шаблоне HomePageComponent:
<div *ngFor="let event of events$ | async">
<app-event [event]="event"></app-event>
</div>
Вот как будет выглядеть EventComponent
в этом случае:
import { Component, Input, OnChanges } from '@angular/core';
@Component({
selector: 'app-event',
templateUrl: './event.component.html',
styleUrls: ['./event.component.css']
})
export class EventComponent implements OnChanges{
@Input() event;
ngOnChanges() {
this.events$ = this.http.get("/events");
}
}