åå©çšå¯èœãª**ãµãŒãã¹(Services)**ãäœããããŒããŒã®ããŒã¿åŒã³åºãã管çãã
ã¢ããªã±ãŒã·ã§ã³ã¯é²åãç¶ããŠãããè¿ããã¡ãããããã®ã³ã³ããŒãã³ãã远å ããããšã«ãªãã ããã ãããã®ã³ã³ããŒãã³ãã¯ããŒããŒã®ããŒã¿ãžã¢ã¯ã»ã¹ããå¿ èŠãããã ããã ãããããã®åºŠã«ããŒããŒã®ããŒã¿ãã³ããŒ&ããŒã¹ãã¯ããããªãã ãã®ä»£ããã«ãä»åã¯åäžããã€åå©çšã§ãããµãŒãã¹ãäœããããŒã¿ãå¿ èŠãªã³ã³ããŒãã³ãã«æ³šå ¥ããæ¹æ³ãåŠã¶ã
ããŒã¿ãžã®ã¢ã¯ã»ã¹ãåé¢ããããµãŒãã¹ã«åæ§ç¯ãã(眮ãçŽã)ããšã¯ã ã³ã³ããŒãã³ãã®æ©èœã衚瀺ãšããç®çã«çµãèŸŒã¿æ³šåããããšããç¶æ ãç¶æããããšã«ãªãã ãŸãããµãŒãã¹èªäœãã¢ãã¯(ãããŒ)ã«çœ®ãæããããšã§ãŠããããã¹ãããããããªãã
ãµãŒãã¹ã¯åžžã«éåæåŠçã§ããããããã®ç« ã®æçµçãªç®ç㯠Promise ãã¿ãŒã³ãå©çšãããµãŒãã¹ãäœãããšãšããã
ãã®ç« ãç¶ããåã«ããŸãååã®ç« ãçµãã£ãæã®ãã©ã«ãæ§é ã確èªããŠã¿ããã ãã以äžã®ããã«ãªã£ãŠããªããªããåã®ç« ã«æ»ã£ãŠã©ããè¶³ããªãã®ããæ¢ããŠã¿ãŠã»ããã
angular2-tour-of-heroes
âapp
ââapp.component.ts
ââhero.ts
ââhero-detail.component.ts
ââmain.ts
ânode_modules ...
âtypings ...
âindex.html
âpackage.json
âstyles.css
âtsconfig.json
âtypings.json
npm start ã§ TypeScript ã®èªåã³ã³ãã€ã«ãšã¢ããªã±ãŒã·ã§ã³ã®ãªããŒããæå¹ã«ããŠãããã
ãã®ã³ãã³ã㯠TypeScript ã®ã³ã³ãã€ã©ã watch mode ã§åããããµãŒããŒãåäœãããã
ã¢ããªã±ãŒã·ã§ã³ããã©ãŠã¶ã§èµ·åããéçºäžã«ã¢ããªã±ãŒã·ã§ã³ãåäœããããŸãŸæŽæ°ãåæ ãããããšãã§ããã
ã¹ããŒã¯ãã«ããŒãä»ã®ã¢ããªãæ¡å€§ããŠããèŠéããæã ã«æãããã 圌ãã¯ããããããªããŒãžã§ããããããªåœ¢åŒã§ããŒããŒã®æ å ±ã衚瀺ããããšèšãã ä»ãŸã§ã®éçºã§ãæã ã¯äžèЧç»é¢ããããŒããŒãéžæã§ããããã«ãªã£ãã ãã®å ããããããŒããŒã衚瀺ããããã·ã¥ããŒãç»é¢ãšãããŒããŒã®æ å ±ãç·šéããå¥ç»é¢ã远å ããããšã«ãªãã ãã®3ã€ã®ç»é¢ã§ã¯ãå ±ã«ããŒããŒã®æ å ±ãå¿ èŠãšããŠããã
ä»ãAppComponent ã®äžã«è¡šç€ºçšã®ããŒããŒäžèЧããŒã¿ãå®çŸ©ãããŠããã
ããã§2ã€åé¡ãããã
1ã€ã¯ãããŒããŒã®ããŒã¿ãå®çŸ©ããã®ã¯ã³ã³ããŒãã³ãã®è²¬åã§ã¯ãªãããšããããšã
ãã1ã€ã¯ãããã«æžãããŠããããŒããŒã®ããŒã¿ããå¥ã®ã³ã³ããŒãã³ããç»é¢ãšå
±æããã®ãç°¡åã§ã¯ãªãããšããããšã ã
ããã§ãããŒããŒã®ããŒã¿ãæäŸãå¿ èŠãªã³ã³ããŒãã³ãå士ã§å ±æã§ããããã«ã ããŒããŒã®ããŒã¿ãååŸãããšããä»äºã1ã€ã®ãµãŒãã¹ã«åæ§ç¯ããããšãã§ããã
app ãã©ã«ãã« hero.service.ts ãšãããã¡ã€ã«ãäœãã
ãµãŒãã¹ãèšè¿°ãããã¡ã€ã«ã«ã¯ .service ãä»ãããšèšã決ãŸãã«ãããã
ãããµãŒãã¹ã®ååãè€æ°åèªã§æ§æããããããªãã®ã§ãããªãã- ã§ç¹ãã(ã±ããã±ãŒã¹)ã
äŸãã°ãSpecialSuperHeroService ãšãããµãŒãã¹ãå®çŸ©ãããªãããã®ãã¡ã€ã«å㯠special-super-hero.service.ts ãšãªãã ããã
ããã§ã¯ããµãŒãã¹ã®ã¯ã©ã¹åã HeroService ãšãã
ãããä»ã®ã³ã³ããŒãã³ãããã€ã³ããŒãã§ããããããšã¯ã¹ããŒãããã
import {Injectable} from 'angular2/core';
@Injectable()
export class HeroService {
}ããã§ãAngular ã® Injectable ãã€ã³ããŒãããŠããããã€ãã @Injectable() ãšãããã³ã¬ãŒã¿ãŒã§(HeroServiceã)修食ããŠããããšããããšã«æ°ãã€ããŠã»ããã
åŸãã®()ãå¿ããŠã¯ãããªããä»ãå¿ããŠããŸããšãããããããšã©ãŒãåºãŠèš³ãåãããªããªããã
TypeScript ã¯ãã® @Injectable() ãã³ã¬ãŒã¿ãŒãèŠãŠã HeroService ã«ããã¡ã¿ããŒã¿ãçºè¡ããã
ãã®ã¡ã¿ããŒã¿ãšã¯ãAngular ããã®ãµãŒãã¹ãå¿
èŠãšãããã³ã³ããŒãã³ãã«**泚å
¥(Injection)**ããå¿
èŠããããããããªãããšããããšã ã
ãã³ã¬ãŒã¿ãä»ããããä»ã®ãšãã㯠HeroService ã¯äœãããäŸåãããŠããªãã
ããã¯ãããŒã¿ã®äžè²«æ§ããå°æ¥ã«ããã£ãŠã®äºææ§ç¶æãæåããæŽããŠããããã®ãã®ã§ã
ãã㯠@Injectable() ãã³ã¬ãŒã¿ãŒé©çšã«ã€ããŠã®ããã¹ããã©ã¯ãã£ã¹ãã§ããã®ã ã
getHeroes ãšããååã®**ã¹ã¿ã(stub)**ã¡ãœããã远å ããŠã¿ããã
@Injectable()
export class HeroService {
getHeroes() {
}
}ä»ã¯äžèº«ã®å®è£ ãä¿çããŠãããšããã®ããã€ã³ãã ã
ãã®ãµãŒãã¹ã䜿ããæ¶è²»è
ã( = åã³ã³ããŒãã³ã)ã¯ããã®ãµãŒãã¹èªèº«ãã©ããã£ãŠå
ãšãªãããŒã¿ãååŸããããç¥ããªãã®ã ã
HeroService ã¯ã©ãããããŒã¿ãååŸããŠãè¯ãã
ãŠã§ããµãŒãã¹ã§ããããŒã«ã«ã¹ãã¬ãŒãžã§ããã©ããã«ã¹ãæžããããããŒããŒã¿ã§ãããã
ããã¯ãã³ã³ããŒãã³ãããããŒã¿ã¢ã¯ã»ã¹ã®æ©èœãåãé€ãããšããçŸåŠã§ããã
ä¿çããŠãã getHeroes ã«ç«ã¡è¿ããšããã®éšåã®å®è£
ã¯ãããŒã¿ã®ååŸæ¹æ³ã«é¢ããŠãã³ã³ããŒãã³ãã«è§Šãããšãªããæã®ãŸãŸã«æžããŠè¯ããšããããšã ã
(泚é: getHeroes ãšã¯ãã©ããããããŒããŒã®ããŒã¿ãæã£ãŠããããšããã¡ãœããã ããã®æ©èœããµãŒãã¹ã«ãããšããããšã¯ãã³ã³ããŒãã³ãã¯ãã©ããããããŒããŒã®ããŒã¿ãæã£ãŠãããããšãèããªããŠè¯ããªãããŸãã³ã³ããŒãã³ãã®è²¬ä»»ãæžãã®ã ãä»å®è£
ãä¿çããéšåã¯æã®ãŸãŸã«æžããŠããããããå€ããŠããã³ã³ããŒãã³ãã¯ãããç¥ããªããŠè¯ããã€ãŸãã³ã³ããŒãã³ãã«åœ±é¿ãäžããªããšèšãç¹ã®çŸããã«ã€ããŠãã€ããèªã£ãŠãããäŸãã°ãããŒããŒã®ããŒã¿ããã¹ãçšã®ããŒã¿ã«ããããšãã«ãããè§Šãã ãã§ãããªã)
ããŠãä»ãããŒã®ããŒããŒäžèЧã®ããŒã¿ã AppComponent ã«æžãããŠããã HeroService ã«ã¯å±ããŠããªãã
ãã®ããŒã¿ãç¬èªã®ãã¡ã€ã«ã«ç§»åãããã
app ãã©ã«ãã« mock-heroes.ts ãäœã app.component.ts ããããŒããŒã®é
åãã«ãã&ããŒã¹ããããã
import {Hero} from './hero'; ã®ã€ã³ããŒã宣èšã¯ããã®é
åã Hero åã§ããããã«å¿
èŠãªãã®ã ã
import {Hero} from './hero';
export var HEROES: Hero[] = [
{"id": 11, "name": "Mr. Nice"},
{"id": 12, "name": "Narco"},
{"id": 13, "name": "Bombasto"},
{"id": 14, "name": "Celeritas"},
{"id": 15, "name": "Magneta"},
{"id": 16, "name": "RubberMan"},
{"id": 17, "name": "Dynama"},
{"id": 18, "name": "Dr IQ"},
{"id": 19, "name": "Magma"},
{"id": 20, "name": "Tornado"}
];HEROES ã®é
åããšã¯ã¹ããŒãããå€éšãäŸãã° HeroService ããã€ã³ããŒãåºæ¥ãããã«ããã
(泚é: ããåæã ãšé
åã constant ã£ãŠæžããŠãããã©å®ã¯å€æ°ã ãåã£ãœãã®ã§æ°ãã€ãã)
ãã㊠app.component.ts ã«æ»ãã AppComponent ã® heroes ããããã£ãåæåããªãããã«ããŠããã
heroes: Hero[];HeroService ã«æ»ã£ãŠããããŒã® HEROESãã€ã³ããŒããããã®é
åãè¿ãããã« getHeroes ã¡ãœãããæžããã
HeroService ã¯ãããªãã
import {HEROES} from './mock-heroes';
import {Injectable} from 'angular2/core';
@Injectable()
export class HeroService {
getHeroes() {
return HEROES;
}
}(çå: ããã§ Hero åã®ã€ã³ããŒãããªãã®ã¯ãªãïŒ mock-heroes ããã®åæšè«ã§ã¡ãœããã®åãŸã§ã¡ãããš ãšHero åã§ãããšèªèãããïŒãäŸãã°ã¡ãœããã«åãæç€ºãããæãããã®ããªïŒ)
ãŸãAppComponent ãããã³ã³ããŒãã³ãå
ã§ HeroService ãäœ¿ãæºåãããã
ãŸããã€ãã®ããã«äœ¿ããã HeroService ãã€ã³ããŒããããã
import {HeroService} from './hero.service';ãµãŒãã¹ãã€ã³ããŒãããããšã§ãã³ã³ããŒãã³ãã®ã³ãŒãããåç
§å¯èœã«ãªã£ãã
ããã§ãAppComponentã¯å
·äœç㪠HeroService ã®ã€ã³ã¹ã¿ã³ã¹ãååŸããã®ã ãããã
HeroService ã new ããã°ããã®ãïŒãŸããïŒ
ãããã«ã以äžã®ããã«å®£èšããã°ã€ã³ã¹ã¿ã³ã¹ãåŸãããã
heroService = new HeroService(); // ãã以äžãããªã
ããããããã¯ããã€ãã®çç±ã§è¯ããªãæ¹æ³ãªã®ã ã
ã³ã³ããŒãã³ã㯠HeroService ãäœãåºãæ¹æ³ãç¥ãå¿
èŠãããã
HeroService ã®**ã³ã³ã¹ãã©ã¯ã¿(constructor new ããæã®åæåã¡ãœãã)**ã倿Žããããã³ã«
(ããšãã°ã¡ãœããã«åŒæ°ã远å ããããšã)æã
ã¯ãµãŒãã¹ãäœã£ãŠããéšåãå
šãŠæ¢ããŠæžãæããªããã°ãªããªããªãã
ãã®ããã«æžãæããæ¿ãããªã£ãŠããŸã£ãã³ãŒãã¯ãšã©ãŒãçºçããããããŸããã¹ãã®æéãæããã
ãµãŒãã¹ãæ¯å new ã§äœãããšãããå°ãèããŠã¿ããã ãã®ãµãŒãã¹ãååŸããããŒã¿ãå éšã«æºã蟌ãã§ããããä»ã®éšåã«äœ¿ãåããŠããããšãããïŒ ããã ãšæ¯å new ããããšã§å°ç¡ãã«ãªã£ãŠããŸãã
ãã®ããã«ãHeroService ã®ç¹å®ã®å®è£
ã«ãã£ãŠã¯ AppComponent ã®å®è£
ããæçžããŠããŸãã®ã ã
ç¶æ³ãå€åãããšãã«å®è£
ã倿Žããã®ã¯å€§å€ã«ãªãã ããã
ããšãã°ãªãã©ã€ã³ã¢ããªã±ãŒã·ã§ã³ã«ãªã£ããïŒãã¹ãã§å¥ã®ããŒã¿ãåã蟌ãããã«ããã¹ãæã¯ïŒãã£ãšç°¡åã§ã¯ãªãã
ãããªãšãâŠâŠâŠã©ãããã°âŠâŠâŠãããã§ããããšã¯ããïŒ å®ã®ãšãããäžã®ãããªééã£ãæžãæ¹ãããèšãèš³ãã§ããªãã»ã©ããã®åé¡ã®åé¿ã¯ç°¡åãªã®ã ã
äžè¡ã§ new ãã代ããã«ã以äžã®2ã€ã®åŠçã«çœ®ãæããã
AppComponentã«ã³ã³ã¹ãã©ã¯ã¿ã远å ãã- ã³ã³ããŒãã³ãã®ã¡ã¿ããŒã¿ã«
providersããããã£ã远å ãã
ã³ã³ã¹ãã©ã¯ã¿ã¯ããã ã
constructor(private _heroService: HeroService) { }ãã®ã³ã³ã¹ãã©ã¯ã¿èªäœã¯ãªã«ãããªãã
ãã®ãã©ã¡ãŒã¿ãŒå®çŸ©ã¯ã_heroService ãšãããã©ã€ããŒããªããããã£ãäœãããããæ³šå
¥å¯Ÿè±¡ã® HeroService ã§ãããšå®çŸ©ããã
ããã§ããã®HeroService åã®ãã©ã€ããŒã倿°ããã³ã³ããŒãã³ãã®ãããªãã¯ãªAPIã§ã¯ãªããšããããšã匷調ããããã倿°åã®å
é ã« _ ãä»ããŠãããã
ããã§ãAngular 㯠AppComponent ãäœããããšãã«ãããã« HeroService ã®ã€ã³ã¹ã¿ã³ã¹ãæäŸããæ¹æ³ãç¥ãããšãã§ããã
Angular ã¯ãã€ã³ã¹ã¿ã³ã¹ãã©ããããååŸããå¿
èŠããããããã¯ãAngular ã® DIã³ã³ãã(Dependency Injector) ã®åœ¹å²ã ã
DIã³ã³ããã¯(åæã ãšInjectorãªã®ã§æ¹ããŠèª¬æãããš)å
éšã«ã³ã³ãããæã£ãŠãããããã«äœã£ããµãŒãã¹(ã®ã€ã³ã¹ã¿ã³ã¹)ãä¿æããŠãããã
ã€ãŸããå¿
èŠã«ãªã£ããšãã«ãã³ã³ããã« HeroService ã®ã€ã³ã¹ã¿ã³ã¹ãå
¥ã£ãŠããã°ããã Angular ã«è¿ãããå
¥ã£ãŠããªããã°èªåã§ã€ã³ã¹ã¿ã³ã¹ãäœã£ãŠã³ã³ããã«å
¥ããåŸã«ããã Angular ã«è¿ãã®ã ã
æ³šå ¥ã«ã€ããŠã¯ãäŸåæ§ã®æ³šå ¥ã®ç« ã§ãããæ·±ãåŠã¹ãã ããã
DIã³ã³ããã¯ãŸã HeroService ã®äœãæ¹ãç¥ããªããã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããšããAngular ã¯ãã®ãããªãšã©ãŒãåºãã ããã
EXCEPTION: No provider for HeroService! (AppComponent -> HeroService)
ããã§ãHeroService ã®æäŸè
ãã³ã³ããŒãã³ãã«ç»é²ããããšã§ãDIã³ã³ããã«äœãå¿
èŠããäŒããå¿
èŠãããã
@Component ãã³ã¬ãŒã¿ã®äžã«æžãããã¡ã¿ããŒã¿ã®æäžéšã«ãproviders ãšããååã§é
åããããã£ã远å ãããã
providers: [HeroService]ãã®é
åããããã£ã«ãã£ãŠãAngular ã«å¯Ÿã㊠AppComponent ãäœããšãã« HeroService ã®æ°ããã€ã³ã¹ã¿ã³ã¹ãäœããããäŒããããšãã§ããã
AppComponent ã¯ãã®ãµãŒãã¹ãéããŠãããŒããŒã®ããŒã¿ãååŸããããšãã§ããä»ãåã³ã³ããŒãã³ããåããµãŒãã¹(ã®åãã€ã³ã¹ã¿ã³ã¹)ãéããŠãããŒããŒã®ããŒã¿ãååŸããããšãã§ããã
ãµãŒãã¹ãšã³ã³ããŒãã³ãããªãŒ
AppComponentããã³ãã¬ãŒãã®äžéšã«æžããã<my-hero-detail>ã§ã察å¿ããHeroDetailComponentã®ã€ã³ã¹ã¿ã³ã¹ãäœãåºãããšããããšãæãåºããŠã»ããã ãšããããšã¯ãHeroDetailComponentã¯AppComponentã®**åã³ã³ããŒãã³ã(child)**ã ãšããããšã ã
HeroDetailComponentã芪ã³ã³ããŒãã³ãã®HeroServiceãå¿ èŠãªãšããAppComponentã§ãããšããšåãããã«ãã³ã³ã¹ãã©ã¯ã¿çµç±ã§ Angular ã«HeroServiceãæ³šå ¥ããŠãããå¿ èŠããããconstructor(private _heroService: HeroService) { }ãã ãã
HeroDetailComponentã®ãã³ã¬ãŒã¿ã«providersã远å ããå¿ èŠã¯ãªãïŒ ãªããã¯ä»é²ã§èª¬æãããAppComponentã¯ã¢ããªã±ãŒã·ã§ã³ã§æãäžäœã®ã³ã³ããŒãã³ãã ã ã€ãŸãAppComponentã®ã€ã³ã¹ã¿ã³ã¹ã¯å¿ ã1ã€ã§ãããHeroServiceã®ã€ã³ã¹ã¿ã³ã¹ãã¢ããªã±ãŒã·ã§ã³ãéããŠ1ã€ã§ããã
ä»ãAppComponent ã®ãã©ã€ããŒã倿°_heroService ã« HeroService ã®ã€ã³ã¹ã¿ã³ã¹ãå
¥ã£ãŠããã
ããã䜿ã£ãŠã¿ããã
äžç¬èããŠã¿ããããµãŒãã¹ã®åŒã³åºããšããŒã¿ã®ååŸã¯ãåãããŠ1è¡ã§è¡šçŸã§ããã
this.heroes = this._heroService.getHeroes();
æ¬åœã¯ãã®1è¡ãã©ãããããããªã¡ãœããã¯å¿ èŠãªãã®ã ãã以äžã®ããã«æžããŠãããã
getHeroes() {
this.heroes = this._heroService.getHeroes();
}AppComponent ã¯é£ãªã(without a fuss)ããŒããŒã®æ
å ±ãååŸãã衚瀺ããå¿
èŠãããã
getHeroes ã¯ã©ãã§åŒã°ããã¹ãã ãããïŒã³ã³ã¹ãã©ã¯ã¿å
éšïŒããã§ã¯ãªãã
ããã°ã©ãã³ã°ã®é·ãèŠãã¿ã®æŽå²ãšã¯ãæã ã«ãã³ã³ã¹ãã©ã¯ã¿å éšãããµãŒããŒãžã®ããŒã¿ã¢ã¯ã»ã¹ã®ãããªè€éãªããžãã¯ã絶察ã«å ¥ããŠã¯ãããªãããšããæèšãæ®ããã
ã³ã³ã¹ãã©ã¯ã¿ã¯äžãããããã©ã¡ãŒã¿ãããããã£ã«ã»ãããããªã©è»œãåæååŠçã®ããã«ããããããŒãªããã£ã³ã°ã®çºã«ããã®ã§ã¯ãªãã æã ã¯ããã¹ãã§ãã³ã³ããŒãã³ããäœããç¶æ ã«ããå¿ èŠããããããã§å®éã«ããã§ããã(ãµãŒããŒåŒã³åºããªã©ã®)äœæ¥ã(ã³ã³ã¹ãã©ã¯ã¿ã®äžã§)æ°ã«ããããšããªãããã«ããå¿ èŠãããã
ãããã³ã³ã¹ãã©ã¯ã¿ã®äžã§ getHeroes ãåŒã°ãªãã®ã§ããã°ãå€éšã®äœããã¡ãœãããåŒã°ãªããã°ãªããªãã
Angular ã·ã¹ãã å
ã«çšæããã ngOnInit ãšããã©ã€ããµã€ã¯ã«ããã¯(Lifecycle Hook) ã®äžèº«ãå®è£
ãããã°ãAngularãã¯ãã®ã¡ãœãããåŒã³åºããŠãããã
Angular ã¯ä»ã«ããã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã«é¢ããŠãéèŠãªç¬éãæŽ»çšããããã®ããã¯ã€ã³ã¿ãŒãã§ãŒã¹ãçšæããŠããã
ã³ã³ããŒãã³ããäœãããæã®ããã¯ã倿Žãèµ·ãã£ããšãã®ããã¯ãã³ã³ããŒãã³ããæçµçã«ç Žæ£ãããæã®ããã¯ãªã©ã ã
ããããã€ã³ã¿ãŒãã§ãŒã¹ã¯ããããã1ã€ã®ã¡ãœãããæã£ãŠãããã³ã³ããŒãã³ãã®äžã§ãã®ã¡ãœããã®å®è£
ãèšè¿°ãããšãAngular ã¯é©åãªã¿ã€ãã³ã°ã§åŠçãå®è¡ããŠãããã®ã ã
ã©ã€ããµã€ã¯ã«ããã¯ã«ã€ããŠã¯ãã©ã€ããµã€ã¯ã«ããã¯ã®ç« ã§ãããæ·±ãåŠã¹ãã ããã
OnInit ã€ã³ã¿ãŒãã§ãŒã¹ã«é¢ããŠã®å€§çã¯ä»¥äžã®ããã«ãªãã
import {OnInit} from 'angular2/core';
export class AppComponent implements OnInit {
ngOnInit() {
}
}ngOnInit ã¡ãœããã«åæåããããã®ããžãã¯ãæžããŠãAngular ã«æ£ããã¿ã€ãã³ã°ã§åŒã³åºãã®ãä»»ããŠã¿ããã
ä»åã§èšãã°ãgetHeroes ãå
éšã§åŒãã§ãããŒããŒã®æ
å ±ãåæåããåŠçã ã
ngOnInit() {
this.getHeroes();
}æå³ããéããããŒããŒã®äžèЧã衚瀺ãããååãã¯ãªãã¯ããããŒããŒã®è©³çްã衚瀺ãããã ãŽãŒã«ã«ã ãã¶è¿ã¥ããããããã¡ãã£ãšéãã®ã ã
HeroService ã¯ãããŒã®ããŒããŒããŒã¿ãå³åº§ã«è¿ããgetHeroes ã®ã·ã°ããã£ã¯åæçã ã
(ã¡ãœããã·ã°ããã£ã¯ã¡ãœããã®å®çŸ©ã瀺ãèªãšããŠãã䜿ãããŠãã)
this.heroes = this._heroService.getHeroes();
ããŒããŒã®ããŒã¿ãåãåãããŠãããã¯è¿åŽå€ã®äžã«å ¥ã£ãŠããã ãã€ãããã®ããŒããŒã®ããŒã¿ããµãŒããŒããååŸããããã«ããã ããã ãŸã HTTP ã«ããåãåããã¯ããªãããåŸã®ç« ã§ããããšã«ãªãã
ãããããšãã«ãæã ã¯ãµãŒããŒããã®å¿çãåŸ ããªããã°ãªããªãã ãããããã©ãŠã¶ã®åäœã¯ãããã¯ãèš±ããªã(UIã®åŠçãæ¢ããŠããŸããšãå¿çããããŸããããã®ã¿ããéããŸããïŒããšãåºãŠããŸã)ã®ã ãããå¿çãåŸ ã£ãŠãéã«UIã®åŠçãæ¢ãããã£ããšããŠãæ¢ããŠã¯ãããªãã
æã
ã¯getHeroes ã¡ãœããã®å
å®¹ãæžãæããéåæåŠçã䜿ãããã«ããªããã°ãªããªãã
ããã§ Promise ã䜿ãã
Promise ãšã¯âŠâŠçµæãæºåã§ãããšãã«(çµæã䜿ã£ã)åŠçãã³ãŒã«ããã¯ããããšãçŽæããããšã ã
æã ã¯éåæãµãŒãã¹ã«å¯ŸããŠãäœããã®ä»äºãããŠããããšãšãã«ãã³ãŒã«ããã¯é¢æ°ãæž¡ãããšã«ãªãã ãããããšãäœããã®ä»äº(ãµãŒãã¹ã®æ©èœ)ãè¡ã£ãåŸããã®çµæãåºãŠãããšã©ãŒãããšã«ãæž¡ããã³ãŒã«ããã¯é¢æ°ãå®è¡ããŠããããã
ç°¡åã«ããããã«ãããã§ã¯ ES2015 ã® Promise ã«ã€ããŠèª¬æãããã ä»ã®èšèªããã¬ãŒã ã¯ãŒã¯ã® Promise ã«ã€ããŠã¯ web ã®ä»ã®ãªãœãŒã¹ã§åŠãã§ã»ããã
HeroService ã® getHeroes ã Promise ãè¿ãããã«æžãæããŠã¿ããã
getHeroes() {
return Promise.resolve(HEROES);
}ããŒããŒã®ããŒã¿ã¯æªã ãããŒã§ããã
ããããµãŒããŒãšããŠæ³å®ãããšãèŠæ±ã«ã¿ã€ã ã©ã°ãªãã§å¿çãããšãŠãéããµãŒããŒã§ãPromise ã¯ããŒããŒã®ãããŒããŒã¿ã
ããããŸè§£æ±ºãããç¶æ
ã§è¿åŽããã ããã
AppComponent ã® getHeroes ã¡ãœããã¯ä»¥äžã®ããã«ãªã£ãŠããã¯ãã ã
getHeroes() {
this.heroes = this._heroService.getHeroes();
}HeroService ã«å€æŽãå ããçµæ this.heroes ã«ã¯ããŒããŒã®äžèЧããŒã¿ã§ã¯ãªããPromise ãªããžã§ã¯ããã»ãããããŠããŸãããã«ãªã£ãŠããã
æã
ã¯ãæž¡ããã Promise ãªããžã§ã¯ãã解決ããããšãã«åãããã«å®è£
ãå€ããªããã°ãªããªãã
Promise ãªããžã§ã¯ãã解決ããããšãã«ãããŒããŒäžèЧã衚瀺ãããããã«ããã®ã ã
Promise ãæã€ then ã¡ãœããã«ã以äžã®ã³ãŒã«ããã¯é¢æ°ãå
¥ããŠæž¡ããã
getHeroes() {
this._heroService.getHeroes().then(heroes => this.heroes = heroes);
}ã³ãŒã«ããã¯ãšããŠæž¡ããŠããES2015 ã®ã¢ããŒé¢æ°ã¯ããããšç䟡ãªé¢æ°è¡šçŸãããç°¡åã«ãããåªé ã«è¡šçŸããã
ã³ãŒã«ããã¯é¢æ°ã¯ AppComponent ã® heroes ããããã£ã«ãµãŒãã¹ããè¿ãããäžèЧããŒã¿ãã»ãããããããã§å
šãŠãæã£ãïŒ
èŠãç®äžã§ã¯ã¢ããªã±ãŒã·ã§ã³ã¯ããŒããŒäžèЧãåºããéžæããããŒããŒã®è©³çްãåºãããšããã®ã¯å€ãããªãã¯ãã ã
ãµãŒããŒã®å¿çãé ããããªå Žåãæ³å®ããããŒããŒã®ããŒã¿ååŸãé ãããŒãžã§ã³ã確èªããŠã¿ããã
ãã®ç« ã§ãªãã¡ã¯ã¿ãªã³ã°ãããåŸã®ãã©ã«ãæ§é ã確èªããŠã¿ããã
angular2-tour-of-heroes
âapp
ââapp.component.ts
ââhero.ts
ââhero-detail.component.ts
ââhero.service.ts
ââmain.ts
ââmock-heroes.ts
ânode_modules ...
âtypings ...
âindex.html
âpackage.json
âstyles.css
âtsconfig.json
âtypings.json
ãã®ç« ã§è°è«ã«æãã£ããã¡ã€ã«ã¯ãã¡ãã
ãã®ç« ã§æã ãåŸããã®ã¯ã以äžã®ããã«ãŸãšããããã
- å€ãã®ã³ã³ããŒãã³ãéã§å ±æã§ãããµãŒãã¹ãäœã
AppComponentãäœããããšãã«ããŒããŒã®ããŒã¿ãååŸãããããngOnInitãšããã©ã€ããµã€ã¯ã«ããã¯ã䜿ãHeroServiceãAppComponentã®ãããã€ããšããŠç»é²ãã- ããŒããŒã®ãããŒããŒã¿ãäœæããããããµãŒãã¹ã«ã€ã³ããŒããã
- ãµãŒãã¹ã
Promiseãè¿ãããã«ããã³ã³ããŒãã³ãã¯Promiseçµç±ã§ããŒã¿ãååŸããããã«ãã
ä»åäœã£ããã®ã®ãã¢
ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ã³ã³ããŒãã³ãããµãŒãã¹ã®å ±æã«ããããåå©çšæ§ãé«ãŸã£ãŠããã
æã ã¯ããã·ã¥ããŒãç»é¢ãäœããç»é¢ãç§»åããããã®ãªã³ã¯ãäœãããããŠãã³ãã¬ãŒãã®äžã§ããŒã¿ãæŽåœ¢ããŠè¡šç€ºãããã ãã®å ã®ã¢ããªã±ãŒã·ã§ã³ã®é²åã®éçšã§ããã®ãããªæ§æãç°¡åã«äœãæé·ãããæ¹æ³ããããŠã¡ã³ããã³ã¹ã®æ¹æ³ãåŠã¶ããšã«ãªãã ããã
Angular ã®ã«ãŒã¿ãŒ(Router) ã«ã€ããŠããããŠç»é¢éãç§»åã§ãããããªèšèšã«é¢ããŠã次åäœæ¥ãè¡ããªãã説æããŠããã
ããŒããŒã®ããŒã¿ããµãŒããŒã«ãããšèããŠããµãŒããŒãšã®æ¥ç¶ãé ãå ŽåãèããŠã¿ããã
HeroService åã« Hero åãã€ã³ããŒãããŠãgetHeroesSlowly ã¡ãœãããäœã£ãŠã¿ããã
getHeroesSlowly() {
return new Promise<Hero[]>(resolve =>
setTimeout(()=>resolve(HEROES), 2000) // 2 seconds
);
}ã ããã㯠getHeroes ãšåãã ããããã Promise ã¯ããŒããŒã®ãããŒããŒã¿ã解決ããåã«2ç§é€šåŸ
ã€ããã«ããŠããã
AppComponent ã«æ»ãã_heroService.getHeroes ã䜿ã£ãŠããéšåã _heroService.getHeroesSlowly ã䜿ãããã«å€ããŠã¿ãŠãã¢ããªã±ãŒã·ã§ã³ãã©ã®ãããªåäœããããèŠãŠã¿ããã
AppComponent ã§æ³šå
¥ããã HeroService ãåã³ã³ããŒãã³ãã§ãã HeroDetailComponent ã§ã泚å
¥ããããšããHeroDetailComponentåŽã§ã¯providersããããã£ã®èšå®ãããŠã¯ãããªã ãšããããåããè¡ã£ãã
ãªãã ãããïŒ
å®ã¯ããããŠããŸããšã Angular 㯠HeroDetailComponent ã®ããã«æ°ãã HeroService ã®ã€ã³ã¹ã¿ã³ã¹ãäœã£ãŠããŸãã
HeroDetailComponent ã¯ç¬èªã®ã€ã³ã¹ã¿ã³ã¹ã¯äžèŠã§ãæ¬åœã«å¿
èŠãªã®ã¯ AppComponent ã®äžã®HeroService ãªã®ã ã
ããã§ã providers ããããã£ã®èšå®ãè¡ã HeroService ã®ã€ã³ã¹ã¿ã³ã¹ãäœã£ãŠããŸããšãAppComponent ã®äžã® HeroService ã®ã€ã³ã¹ã¿ã³ã¹ãé ããŠããŸãã
(泚é: åç
§ãäžæžãããŠããŸããAppComponent åŽã«å®äœããã£ãŠããHeroDetailComponent åŽã§äœãããã€ã³ã¹ã¿ã³ã¹ãåªå
çã«åç
§ãããããã«ãªã)
provider ããããã£ãžã®ç»é²ã¯ãã©ãã«ãã¹ããããæ³šææ·±ãèãããã
ç»é²ã®ã¹ã³ãŒããçè§£ããŠãééã£ãã³ã³ããŒãã³ãã®éå±€ã«ãµãŒãã¹ãäœã£ãŠããŸããªãããæ°ãã€ãããã