diff --git a/src/app/app.component.html b/src/app/app.component.html
index ee3c252..b9bf817 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -1,2 +1,3 @@
{{ title }}
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 3317136..9eaf3b9 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -6,12 +6,14 @@ import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { HeroesComponent } from './heroes/heroes.component';
import { HeroDetailComponent } from './hero-detail/hero-detail.component';
+import { MessagesComponent } from './messages/messages.component';
@NgModule({
declarations: [
AppComponent,
HeroesComponent,
- HeroDetailComponent
+ HeroDetailComponent,
+ MessagesComponent
],
imports: [
BrowserModule,
diff --git a/src/app/hero.service.spec.ts b/src/app/hero.service.spec.ts
new file mode 100644
index 0000000..42311f5
--- /dev/null
+++ b/src/app/hero.service.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+
+import { HeroService } from './hero.service';
+
+describe('HeroService', () => {
+ let service: HeroService;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({});
+ service = TestBed.inject(HeroService);
+ });
+
+ it('should be created', () => {
+ expect(service).toBeTruthy();
+ });
+});
diff --git a/src/app/hero.service.ts b/src/app/hero.service.ts
new file mode 100644
index 0000000..5a5f136
--- /dev/null
+++ b/src/app/hero.service.ts
@@ -0,0 +1,19 @@
+import { Injectable } from '@angular/core';
+import { Observable, of } from 'rxjs';
+import { Hero } from './hero';
+import { MessageService } from './messages.service';
+import { HEROES } from './mock-heroes';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class HeroService {
+
+ constructor(private messageService: MessageService) { }
+
+ getHeroes(): Observable {
+ const heroes = of(HEROES)
+ this.messageService.add('HeroService: Heroes fetched!')
+ return heroes
+ }
+}
diff --git a/src/app/heroes/heroes.component.ts b/src/app/heroes/heroes.component.ts
index ad67a77..42beb29 100644
--- a/src/app/heroes/heroes.component.ts
+++ b/src/app/heroes/heroes.component.ts
@@ -1,6 +1,7 @@
import { Component, OnInit } from '@angular/core';
import { Hero } from '../hero';
-import { HEROES } from '../mock-heroes';
+import { HeroService } from '../hero.service';
+import { MessageService } from '../messages.service';
@Component({
selector: 'app-heroes',
@@ -9,16 +10,23 @@ import { HEROES } from '../mock-heroes';
})
export class HeroesComponent implements OnInit {
- constructor() { }
+ constructor(private heroService: HeroService, private messageService: MessageService) { }
selectedHero?: Hero
+
onSelect(hero: Hero): void {
this.selectedHero = hero
+ this.messageService.add(`Hero Component: Selected hero id=${hero.id}`)
}
- heroes = HEROES
+ heroes: Hero[] = []
ngOnInit(): void {
+ this.getHeroes()
+ }
+
+ getHeroes(): void {
+ this.heroService.getHeroes().subscribe(heroes => this.heroes = heroes)
}
}
diff --git a/src/app/messages.service.spec.ts b/src/app/messages.service.spec.ts
new file mode 100644
index 0000000..c09e291
--- /dev/null
+++ b/src/app/messages.service.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+
+import { MessageService } from './messages.service';
+
+describe('MessagesService', () => {
+ let service: MessageService;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({});
+ service = TestBed.inject(MessageService);
+ });
+
+ it('should be created', () => {
+ expect(service).toBeTruthy();
+ });
+});
diff --git a/src/app/messages.service.ts b/src/app/messages.service.ts
new file mode 100644
index 0000000..1e9b8f1
--- /dev/null
+++ b/src/app/messages.service.ts
@@ -0,0 +1,18 @@
+import { Injectable } from '@angular/core';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class MessageService {
+ messages: string[] = []
+
+ add(message: string) {
+ this.messages.push(message)
+ }
+
+ clear() {
+ this.messages = []
+ }
+
+ constructor() { }
+}
diff --git a/src/app/messages/messages.component.html b/src/app/messages/messages.component.html
new file mode 100644
index 0000000..5467660
--- /dev/null
+++ b/src/app/messages/messages.component.html
@@ -0,0 +1,6 @@
+
+
+
Messages
+
+
{{message}}
+
diff --git a/src/app/messages/messages.component.scss b/src/app/messages/messages.component.scss
new file mode 100644
index 0000000..65eb04b
--- /dev/null
+++ b/src/app/messages/messages.component.scss
@@ -0,0 +1,19 @@
+/* MessagesComponent's private CSS styles */
+h2 {
+ color: #A80000;
+ font-family: Arial, Helvetica, sans-serif;
+ font-weight: lighter;
+ }
+
+ .clear {
+ color: #333;
+ background-color: #eee;
+ margin-bottom: 12px;
+ padding: 1rem;
+ border-radius: 4px;
+ font-size: 1rem;
+ }
+ .clear:hover {
+ color: white;
+ background-color: #42545C;
+ }
\ No newline at end of file
diff --git a/src/app/messages/messages.component.spec.ts b/src/app/messages/messages.component.spec.ts
new file mode 100644
index 0000000..a674793
--- /dev/null
+++ b/src/app/messages/messages.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { MessagesComponent } from './messages.component';
+
+describe('MessagesComponent', () => {
+ let component: MessagesComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ MessagesComponent ]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(MessagesComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/messages/messages.component.ts b/src/app/messages/messages.component.ts
new file mode 100644
index 0000000..9d620f3
--- /dev/null
+++ b/src/app/messages/messages.component.ts
@@ -0,0 +1,16 @@
+import { Component, OnInit } from '@angular/core';
+import { MessageService } from '../messages.service';
+
+@Component({
+ selector: 'app-messages',
+ templateUrl: './messages.component.html',
+ styleUrls: ['./messages.component.scss']
+})
+export class MessagesComponent implements OnInit {
+
+ constructor(public messageService: MessageService) { }
+
+ ngOnInit(): void {
+ }
+
+}