| 
									
										
										
										
											2016-02-02 14:39:34 +01:00
										 |  |  | // #docregion
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:06:32 +02:00
										 |  |  | import { Component, Input, OnDestroy } from '@angular/core'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import { MissionService } from './mission.service'; | 
					
						
							|  |  |  | import { Subscription }   from 'rxjs/Subscription'; | 
					
						
							| 
									
										
										
										
											2016-02-02 14:39:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | @Component({ | 
					
						
							|  |  |  |   selector: 'my-astronaut', | 
					
						
							|  |  |  |   template: `
 | 
					
						
							|  |  |  |     <p> | 
					
						
							|  |  |  |       {{astronaut}}: <strong>{{mission}}</strong> | 
					
						
							|  |  |  |       <button | 
					
						
							|  |  |  |         (click)="confirm()" | 
					
						
							|  |  |  |         [disabled]="!announced || confirmed"> | 
					
						
							|  |  |  |         Confirm | 
					
						
							|  |  |  |       </button> | 
					
						
							|  |  |  |     </p> | 
					
						
							|  |  |  |   `
 | 
					
						
							|  |  |  | }) | 
					
						
							| 
									
										
										
										
											2016-06-08 01:06:25 +02:00
										 |  |  | export class AstronautComponent implements OnDestroy { | 
					
						
							| 
									
										
										
										
											2016-02-02 14:39:34 +01:00
										 |  |  |   @Input() astronaut: string; | 
					
						
							| 
									
										
										
										
											2016-06-08 01:06:25 +02:00
										 |  |  |   mission = '<no mission announced>'; | 
					
						
							| 
									
										
										
										
											2016-02-02 14:39:34 +01:00
										 |  |  |   confirmed = false; | 
					
						
							|  |  |  |   announced = false; | 
					
						
							| 
									
										
										
										
											2016-06-08 01:06:25 +02:00
										 |  |  |   subscription: Subscription; | 
					
						
							| 
									
										
										
										
											2016-02-02 14:39:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   constructor(private missionService: MissionService) { | 
					
						
							|  |  |  |     this.subscription = missionService.missionAnnounced$.subscribe( | 
					
						
							|  |  |  |       mission => { | 
					
						
							|  |  |  |         this.mission = mission; | 
					
						
							|  |  |  |         this.announced = true; | 
					
						
							|  |  |  |         this.confirmed = false; | 
					
						
							| 
									
										
										
										
											2016-06-08 01:06:25 +02:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2016-02-02 14:39:34 +01:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   confirm() { | 
					
						
							|  |  |  |     this.confirmed = true; | 
					
						
							|  |  |  |     this.missionService.confirmMission(this.astronaut); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 01:06:25 +02:00
										 |  |  |   ngOnDestroy() { | 
					
						
							| 
									
										
										
										
											2016-02-02 14:39:34 +01:00
										 |  |  |     // prevent memory leak when component destroyed
 | 
					
						
							|  |  |  |     this.subscription.unsubscribe(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-06-08 01:06:25 +02:00
										 |  |  | // #enddocregion
 |