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
 |