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
							 |