46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| // #docregion
 | |
| import { Component }          from '@angular/core';
 | |
| 
 | |
| import { AstronautComponent } from './astronaut.component';
 | |
| import { MissionService }     from './mission.service';
 | |
| 
 | |
| @Component({
 | |
|   selector: 'mission-control',
 | |
|   template: `
 | |
|     <h2>Mission Control</h2>
 | |
|     <button (click)="announce()">Announce mission</button>
 | |
|     <my-astronaut *ngFor="let astronaut of astronauts"
 | |
|       [astronaut]="astronaut">
 | |
|     </my-astronaut>
 | |
|     <h3>History</h3>
 | |
|     <ul>
 | |
|       <li *ngFor="let event of history">{{event}}</li>
 | |
|     </ul>
 | |
|   `,
 | |
|   directives: [AstronautComponent],
 | |
|   providers: [MissionService]
 | |
| })
 | |
| export class MissionControlComponent {
 | |
|   astronauts = ['Lovell', 'Swigert', 'Haise'];
 | |
|   history: string[] = [];
 | |
|   missions = ['Fly to the moon!',
 | |
|               'Fly to mars!',
 | |
|               'Fly to Vegas!'];
 | |
|   nextMission = 0;
 | |
| 
 | |
|   constructor(private missionService: MissionService) {
 | |
|     missionService.missionConfirmed$.subscribe(
 | |
|       astronaut => {
 | |
|         this.history.push(`${astronaut} confirmed the mission`);
 | |
|       });
 | |
|   }
 | |
| 
 | |
|   announce() {
 | |
|     let mission = this.missions[this.nextMission++];
 | |
|     this.missionService.announceMission(mission);
 | |
|     this.history.push(`Mission "${mission}" announced`);
 | |
|     if (this.nextMission >= this.missions.length) { this.nextMission = 0; }
 | |
|   }
 | |
| }
 | |
| // #enddocregion
 |