import { Component, Input, OnDestroy } from '@angular/core'; import { MissionService } from './mission.service'; import { Subscription } from 'rxjs'; @Component({ selector: 'app-astronaut', template: ` ‹p› {{astronaut}}: ‹strong>{{mission}}‹/strong› ‹button (click)="confirm()" [disabled]="!announced || confirmed"› Confirm ‹/button› ‹/p› ` }) export class AstronautComponent implements OnDestroy { @Input() astronaut: string; mission = '‹no mission announced›'; confirmed = false; announced = false; subscription: Subscription; constructor(private missionService: MissionService) { this.subscription = missionService.missionAnnounced$.subscribe( mission => { this.mission = mission; this.announced = true; this.confirmed = false; }); } confirm() { this.confirmed = true; this.missionService.confirmMission(this.astronaut); } ngOnDestroy() { // prevent memory leak when component destroyed this.subscription.unsubscribe(); } }