45 lines
1.1 KiB
TypeScript
45 lines
1.1 KiB
TypeScript
|
// #docregion
|
||
|
import {Component, Input, OnDestroy} from 'angular2/core';
|
||
|
import {MissionService} from './mission.service';
|
||
|
import {Subscription} from 'rxjs/Subscription';
|
||
|
|
||
|
@Component({
|
||
|
selector: 'my-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();
|
||
|
}
|
||
|
}
|
||
|
// #enddocregion
|