docs: add message on click of hero in toh-4 (#34496)
First we used a messages array to display messages toh-4 but it dsplayed only one message added additional messages on click of a hero Fixes #28739 PR Close #34496
This commit is contained in:
parent
e7cf37d99f
commit
61ad50d40a
|
@ -83,9 +83,13 @@ function selectHeroTests() {
|
||||||
|
|
||||||
it('shows selected hero details', async () => {
|
it('shows selected hero details', async () => {
|
||||||
let page = getPageElts();
|
let page = getPageElts();
|
||||||
|
let message = getMessage();
|
||||||
let hero = await Hero.fromDetail(page.heroDetail);
|
let hero = await Hero.fromDetail(page.heroDetail);
|
||||||
expect(hero.id).toEqual(targetHero.id);
|
expect(hero.id).toEqual(targetHero.id);
|
||||||
expect(hero.name).toEqual(targetHero.name.toUpperCase());
|
expect(hero.name).toEqual(targetHero.name.toUpperCase());
|
||||||
|
// Message text contain id number matches the hero.id number
|
||||||
|
expect(message.getText()).toContain(hero.id);
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,3 +135,9 @@ function getPageElts() {
|
||||||
heroDetail: element(by.css('app-root > div, app-root > app-heroes > app-hero-detail > div'))
|
heroDetail: element(by.css('app-root > div, app-root > app-heroes > app-hero-detail > div'))
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getMessage() {
|
||||||
|
let hero = element(by.cssContainingText('li span.badge', targetHero.id.toString()));
|
||||||
|
hero.click();
|
||||||
|
return element.all(by.css('app-root > app-messages > div > div')).get(1);
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import { Component, OnInit } from '@angular/core';
|
||||||
import { Hero } from '../hero';
|
import { Hero } from '../hero';
|
||||||
// #docregion hero-service-import
|
// #docregion hero-service-import
|
||||||
import { HeroService } from '../hero.service';
|
import { HeroService } from '../hero.service';
|
||||||
|
import { MessageService } from '../message.service';
|
||||||
// #enddocregion hero-service-import
|
// #enddocregion hero-service-import
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
@ -21,7 +22,7 @@ export class HeroesComponent implements OnInit {
|
||||||
// #enddocregion heroes
|
// #enddocregion heroes
|
||||||
|
|
||||||
// #docregion ctor
|
// #docregion ctor
|
||||||
constructor(private heroService: HeroService) { }
|
constructor(private heroService: HeroService, private messageService: MessageService) { }
|
||||||
// #enddocregion ctor
|
// #enddocregion ctor
|
||||||
|
|
||||||
// #docregion ng-on-init
|
// #docregion ng-on-init
|
||||||
|
@ -32,6 +33,7 @@ export class HeroesComponent implements OnInit {
|
||||||
|
|
||||||
onSelect(hero: Hero): void {
|
onSelect(hero: Hero): void {
|
||||||
this.selectedHero = hero;
|
this.selectedHero = hero;
|
||||||
|
this.messageService.add(`HeroService: Selected hero id=${hero.id}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// #docregion getHeroes
|
// #docregion getHeroes
|
||||||
|
|
|
@ -16,10 +16,11 @@ you'll rely on Angular [*dependency injection*](guide/dependency-injection)
|
||||||
to inject it into the `HeroesComponent` constructor.
|
to inject it into the `HeroesComponent` constructor.
|
||||||
|
|
||||||
Services are a great way to share information among classes that _don't know each other_.
|
Services are a great way to share information among classes that _don't know each other_.
|
||||||
You'll create a `MessageService` and inject it in two places:
|
You'll create a `MessageService` and inject it in two places.
|
||||||
|
|
||||||
1. in `HeroService` which uses the service to send a message
|
1. Inject in HeroService, which uses the service to send a message.
|
||||||
2. in `MessagesComponent` which displays that message
|
2. Inject in MessagesComponent, which displays that message, and also displays the ID
|
||||||
|
when the user clicks a hero.
|
||||||
|
|
||||||
|
|
||||||
## Create the `HeroService`
|
## Create the `HeroService`
|
||||||
|
@ -367,9 +368,20 @@ to `MessageService.clear()`.
|
||||||
The messages will look better when you add the private CSS styles to `messages.component.css`
|
The messages will look better when you add the private CSS styles to `messages.component.css`
|
||||||
as listed in one of the ["final code review"](#final-code-review) tabs below.
|
as listed in one of the ["final code review"](#final-code-review) tabs below.
|
||||||
|
|
||||||
|
## Add additional messages to hero service
|
||||||
|
|
||||||
|
The following example shows how to send and display a message each time the user clicks on
|
||||||
|
a hero, showing a history of the user's selections. This will be helpful when you get to the
|
||||||
|
next section on [Routing](tutorial/toh-pt5).
|
||||||
|
|
||||||
|
<code-example header="src/app/heroes/heroes.component.ts"
|
||||||
|
path="toh-pt4/src/app/heroes/heroes.component.ts">
|
||||||
|
</code-example>
|
||||||
|
|
||||||
The browser refreshes and the page displays the list of heroes.
|
The browser refreshes and the page displays the list of heroes.
|
||||||
Scroll to the bottom to see the message from the `HeroService` in the message area.
|
Refresh the browser to see the list of heroes, and scroll to the bottom to see the
|
||||||
Click the "clear" button and the message area disappears.
|
messages from the HeroService. Each time you click a hero, a new message appears to record
|
||||||
|
the selection. Use the "clear" button to clear the message history.
|
||||||
|
|
||||||
{@a final-code-review}
|
{@a final-code-review}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue