ã¯ããã«
çãããããã«ã¡ã¯ïŒðð
ç§ã¯éçºçµéšãæµ
ãååŠè
ãšã³ãžãã¢ã§ãããä»ååããŠAngular2ã䜿ã£ãã·ã¹ãã éçºã«ãã£ã¬ã³ãžããŸããïŒð»â𠿣çŽãæåã¯äœãç¥ããªãç¶æ
ã§ã¹ã¿ãŒãããŠã倧å€èŠåŽããããŸããð
ãã§ãããã®éçšã§éçºããæ¥œãã¿ãåŠã¶åã³ãååã«æããããšãã§ããä»ã§ã¯éçºã倧奜ãã«ãªã£ãŠããŸãðã
ä»åã®æçš¿ã§ã¯ãAngular2ã®åºæ¬çãªæŠèŠãäž»èŠãªæŠå¿µãå®éã®ç°å¢æ§ç¯ãå®è¡æé ããããŠå®è·µçãªã³ãŒãäŸãå³è§£ä»ãã§ã玹ä»ããŸããããããAngular2ã«ææŠããçããã®å©ãã«ãªãã°ããšãŠãå¬ããã§ãïŒðâš
Angular2ãšã¯ïŒð€
Angular2ã¯ãã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ïŒSPAïŒãå¹ççã«äœæããããã®ãã¬ãŒã ã¯ãŒã¯ã§ãã以äžã®äž»èŠãªç¹åŸŽããããŸãïŒ
-
ã³ã³ããŒãã³ãããŒã¹
ã¢ããªã±ãŒã·ã§ã³å šäœãå°ããªéšåïŒã³ã³ããŒãã³ãïŒã«åããããšã§ã管çãåå©çšããããããªããŸãð§©
ã -
åæ¹åããŒã¿ãã€ã³ãã£ã³ã°
ããŒã¿ãšãã¥ãŒãèªåã§åæããããŠãŒã¶ãŒã®æäœã«åãããŠãªã¢ã«ã¿ã€ã ã§ç»é¢ãæŽæ°ãããŸãâ¡ïž
ã -
äŸåæ§æ³šå ¥ïŒDependency InjectionïŒ
å¿ èŠãªãµãŒãã¹ãããŒã¿ãç°¡åã«åã蟌ãä»çµã¿ã«ãããã³ãŒãã®åå©çšæ§ãšä¿å®æ§ãåäžããŸãð§
ã
Angular2ã®åºæ¬æŠå¿µð
ããã§ã¯ãAngular2ã®åºæ¬æŠå¿µãå šäœåãšããŠã玹ä»ããåŸåã§åèŠçŽ ããã詳现ã«è§£èª¬ããŸããç§èªèº«ãåããŠAngular2ã«è§Šãããšãã¯æžæãããããŸããããåŠã³ãªããã©ãã©ã楜ãããªã£ãŠãã£ãçµéšãããšã«ãã§ããéãåããããã説æããŠãããŸãïŒð
äž»ãªåºæ¬æŠå¿µ
-
ã³ã³ããŒãã³ã:
UIã®æ§ç¯ãããã¯ã§ããHTMLãã³ãã¬ãŒããTypeScriptã³ãŒããCSSã¹ã¿ã€ã«ã§æ§æãããåå©çšæ§ãšã«ãã»ã«åãå®çŸã§ããŸãð§©âš
ã -
ã¢ãžã¥ãŒã«:
è€æ°ã®ã³ã³ããŒãã³ãããµãŒãã¹ããŸãšããåäœã§ãã¢ããªå šäœã®æ§é 管çãäŸåé¢ä¿ã®æŽçãLazy Loadingãªã©ãå¯èœã«ãªããŸãðŠ
ã -
ããŒã¿ãã€ã³ãã£ã³ã°:
ã³ã³ããŒãã³ãã®ããŒã¿ãšãã³ãã¬ãŒãã®ãã¥ãŒãèªåã§åæããä»çµã¿ãã€ã³ã¿ãŒãã¬ãŒã·ã§ã³ãããããã£ãã€ãã³ãããããŠåæ¹åãã€ã³ãã£ã³ã°ããããŸãð
ã -
ãã£ã¬ã¯ãã£ã:
HTMLèŠçŽ ã«ç¹å®ã®æåã衚瀺ã®å€æŽãå ããä»çµã¿ã§ããäŸãã°ãngIfãngForãšãã£ãæ§é ãã£ã¬ã¯ãã£ãããngClassãngStyleãšãã£ã屿§ãã£ã¬ã¯ãã£ãããããŸãðš
ã -
äŸåæ§æ³šå ¥ãšãµãŒãã¹:
å ±éæ©èœãå€éšAPIã®åŒã³åºãããµãŒãã¹ãšããŠå®è£ ããDIã³ã³ãããéããŠåã³ã³ããŒãã³ãã«æ³šå ¥ããŸããããã«ããã³ãŒãã®åé¢ãšãã¹ãããããããªããŸãð ïž
ã -
ãã€ã:
ããŒã¿ã®ãã©ãŒããã倿ãç°¡åã«è¡ãä»çµã¿ã§ãæ¥ä»ãæ°åãæååã®å€æããã³ãã¬ãŒãå ã§ã·ã³ãã«ã«å®çŸã§ããŸãð ð¢
ã -
ã«ãŒãã£ã³ã°:
ã¢ããªå ã®è€æ°ç»é¢ã®ç®¡çãè¡ããURLãšã³ã³ããŒãã³ãã®å¯Ÿå¿ä»ããLazy Loadingã«ããå¹çåããµããŒãããŸãðºïž
ã
å³è§£ã§èŠãAngular2ã®ã¢ãŒããã¯ãã£ð
以äžã®å³ã¯ãAngular2ãã¢ãžã¥ãŒã«âã³ã³ããŒãã³ãâãã³ãã¬ãŒãã»ã¹ã¿ã€ã«ãšããå±€æ§é ã§éçºãããä»çµã¿ã衚ããŠããŸããåã³ã³ããŒãã³ããç¬ç«ããéšåãšããŠæ©èœããå šäœãäžã€ã®å€§ããªã·ã¹ãã ãšããŠé£æºããŠããã€ã¡ãŒãžã§ãð
ââââââââââââââââââââââ
â App Module â
â (ã¢ããªå
šäœã®ç®¡ç) â
ââââââââââââââââââââââ
â
âââââââââââŽââââââââââ
â â
âââââââââââââââ âââââââââââââââ
â Component â â Component â
â (ç»é¢ãéšå)â â (ç»é¢ãéšå)â
âââââââââââââââ âââââââââââââââ
â â
âââââââââ¬ââââââââââ
â
âââââââââââââââââââ
â Template(HTML) â
âââââââââââââââââââ
â
âââââââââââââââââââ
â Style (CSS) â
âââââââââââââââââââ
ç°¡åãªAngular2ã¢ããªã±ãŒã·ã§ã³ã®äŸð»âš
以äžã¯ãAngular2ã§äœæãããã·ã³ãã«ãªã³ã³ããŒãã³ãã®äŸã§ãããã®ã³ãŒãã¯ããã©ãŠã¶ã«ãHello, Angular2!ããšããã¡ãã»ãŒãžã衚瀺ããŸãðã
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `<h1>Hello, Angular2!</h1>`,
})
export class AppComponent { }
ãã®ã³ãŒãã§ã¯ã@Component
ãã³ã¬ãŒã¿ãŒãå©çšããselectorïŒHTMLã§ã®ã¿ã°åïŒãštemplateïŒè¡šç€ºããHTMLïŒãå®çŸ©ããŠããŸãã
ãœãŒã¹ã³ãŒãã®å®è¡æé ð ïž
Angular2ïŒãŸãã¯çŸè¡ã®AngularïŒãå®éã«åãããŠã¿ãããã®åºæ¬çãªç°å¢æ§ç¯ãšå®è¡æé ã以äžã«ç€ºããŸããåãæåã¯ããããå§ããŸããïŒð
-
Node.jsãšnpmã®ã€ã³ã¹ããŒã«
ãŸãã¯ãNode.jså ¬åŒãµã€ãããNode.jsãã€ã³ã¹ããŒã«ããŠãã ãããnpmã¯Node.jsã«å«ãŸããŠããã®ã§ããã®ãŸãŸäœ¿ããŸãð
ã -
Angular CLIã®ã€ã³ã¹ããŒã«
ã¿ãŒããã«ïŒãŸãã¯ã³ãã³ãããã³ããïŒãéããAngular CLIãã°ããŒãã«ã«ã€ã³ã¹ããŒã«ããŸãnpm install -g @angular/cli
-
æ°èŠãããžã§ã¯ãã®äœæ
Angular CLIã䜿ã£ãŠæ°ãããããžã§ã¯ããäœæããŸããä»åã¯ãããžã§ã¯ãåãangular2-sample
ãšããŸãng new angular2-sample
-
ãããžã§ã¯ããã£ã¬ã¯ããªãžç§»å
cd angular2-sample
-
ã¢ããªã±ãŒã·ã§ã³ã®èµ·å
次ã®ã³ãã³ãã§éçºçšãµãŒããŒãèµ·åãããšããã©ãŠã¶ãèªåã§ãããžã§ã¯ãã衚瀺ããŠãããŸãðng serve --open
ãã©ãŠã¶ãèªåçã«
http://localhost:4200
ãéããã³ã³ããŒãã³ããæ£ãã衚瀺ãããã°æåã§ãïŒð -
ã³ãŒãã®ç·šé
ãããžã§ã¯ãå ã®src/app/app.component.ts
ã«äžèšã®ã³ã³ããŒãã³ãã³ãŒããèšè¿°ããããå¿ èŠã«å¿ããŠå€æŽãããã©ãŠã¶ã§åäœã確èªããŠãã ãã
Angular2ã®åºæ¬æŠå¿µïŒæ¡åŒµè§£èª¬ïŒð
ããããã¯ãAngular2ã®äž»èŠãªåºæ¬æŠå¿µãããã«æ·±æãããŠè§£èª¬ããŸããç§ãæåã¯äžã€äžã€ã«æžæããŸããããå®éã«ã³ãŒããæžããŠã¿ããšããã®å¥¥æ·±ããšé¢çœãã«ã¯ã¯ã¯ã¯ã§ããŸããïŒð
1. ã³ã³ããŒãã³ã (Components)
æŠèŠ:
ã³ã³ããŒãã³ãã¯Angularã¢ããªã®åºæ¬åäœã§ããUIã®äžéšåãããžãã¯ã®ãŸãšãŸãã衚çŸããåå©çšå¯èœãªãã«ãã£ã³ã°ãããã¯ãšããŠå
šäœã®æ§é ã衚瀺ãæ
ããŸãð§©
äž»ãªæ§æèŠçŽ :
-
HTMLãã³ãã¬ãŒã:
ãŠãŒã¶ãŒã«è¡šç€ºããããã¥ãŒãå®çŸ©ããŸããããŒã¿ãã€ã³ãã£ã³ã°ããã£ã¬ã¯ãã£ãã䜿ã£ãŠãåçãªè¡šç€ºãå®çŸããŸã -
TypeScriptã¯ã©ã¹:
ã³ã³ããŒãã³ãã®ããžãã¯ãç¶æ ã管çããã©ã€ããµã€ã¯ã«ããã¯ïŒäŸ:ngOnInit
,ngOnDestroy
ïŒã§åæåãçµäºåŠçãå®è£ ããŸã -
CSSã¹ã¿ã€ã«:
ã³ã³ããŒãã³ãåºæã®ã¹ã¿ã€ã«ãèšè¿°ããä»ã®éšåãšè¡çªããªãããã«ããŸã
å ·äœäŸ:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-hello',
template: `<h1>{{title}}</h1>
<p>Angular2ã®ã³ã³ããŒãã³ãã®åºæ¬äŸã§ãã</p>`,
styles: [`
h1 { color: #2c3e50; }
p { font-size: 16px; }
`]
})
export class HelloComponent implements OnInit {
title: string;
constructor() {
this.title = 'Hello, Angular2!';
}
ngOnInit() {
console.log('HelloComponentãåæåãããŸãã');
}
}
ãã€ã³ã:
- åå©çšæ§ãšã«ãã»ã«åã«ãããã©ãã©ãèŠæš¡ã倧ãããªãã¢ããªã±ãŒã·ã§ã³ã管çãããããªããŸãã
- UIãããžãã¯ãã¹ã¿ã€ã«ãäžäœã«ãªã£ãŠããã®ã§ãåå¿è ã«ãçè§£ããããã§ãð
2. ã¢ãžã¥ãŒã« (Modules)
æŠèŠ:
ã¢ãžã¥ãŒã«ã¯ãã¢ããªå
šäœã®ã³ã³ããŒãã³ãããã£ã¬ã¯ãã£ãããµãŒãã¹ãªã©ããŸãšããåäœã§ããåæ©èœããšã«ã¢ãžã¥ãŒã«ãåããããšã§ãã³ãŒãã®èŠéããè¯ããªããŸãðŠ
äž»ãªåœ¹å²:
-
æ©èœããšã®æŽç:
ãããžã§ã¯ããå€§èŠæš¡ã«ãªã£ãŠããåã¢ãžã¥ãŒã«ããšã«æŽçãããã®ã§ç®¡çãç°¡åã§ã -
Lazy Loadingã®å®çŸ:
å¿ èŠãªãšãã ãèªã¿èŸŒãä»çµã¿ã§ãåå衚瀺ã®é床ãã¢ããããŸãâš
å ·äœäŸ:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HelloComponent } from './hello.component';
@NgModule({
declarations: [
HelloComponent
],
imports: [
BrowserModule
],
bootstrap: [HelloComponent]
})
export class AppModule { }
ãã€ã³ã:
- åæ©èœãã¢ãžã¥ãŒã«ã§æŽçããããšã§ãã³ãŒãã綺éºã«ãŸãšãŸããŸããðš
- Angular CLIã®æ©æµã§ãã¢ãžã¥ãŒã«ã®ç®¡çãæ¥œã ã§ãïŒ
3. ããŒã¿ãã€ã³ãã£ã³ã° (Data Binding)
æŠèŠ:
ã³ã³ããŒãã³ãã®ããŒã¿ïŒã¢ãã«ïŒãšãã³ãã¬ãŒãã®ãã¥ãŒãèªåçã«åæãããŸãããŠãŒã¶ãŒæäœãããŒã¿ã®å€æŽã«åãããŠãåçãªUIãå®çŸã§ããŸãðã
äž»ãªçš®é¡:
-
ã€ã³ã¿ãŒãã¬ãŒã·ã§ã³:
ãã³ãã¬ãŒãå ã§{{ }}
ã䜿ã£ãŠå€æ°ã®å€ã衚瀺ããŸã<p>ããã«ã¡ã¯ã{{ username }}ããïŒ</p>
-
ããããã£ãã€ã³ãã£ã³ã°:
HTMLèŠçŽ ã®ããããã£ã«ãã³ã³ããŒãã³ãã®å€ãèšå®ããŸã<img [src]="imageUrl" alt="ãµã³ãã«ç»å">
-
ã€ãã³ããã€ã³ãã£ã³ã°:
ãŠãŒã¶ãŒã®ã¯ãªãã¯ãå ¥åã«å¿ããŠãã³ã³ããŒãã³ãã®ã¡ãœãããåŒã³åºããŸã<button (click)="onClick()">ã¯ãªãã¯ããŠãã ãã</button>
-
åæ¹åãã€ã³ãã£ã³ã°:
[(ngModel)]
ã䜿ãããã©ãŒã ãšã³ã³ããŒãã³ãã®ããããã£ãåæã«æŽæ°ããŸã<input [(ngModel)]="userInput" placeholder="å ¥åããŠãã ãã"> <p>å ¥åå€ïŒ{{ userInput }}</p>
ãã€ã³ã:
- èªååæã§çŽæ¥DOMæäœã®æéãçããåå¿è ã§ãç°¡åã«æ±ããŸããð
- åãã€ã³ãã£ã³ã°ã䜿ãåããããšã§ãå¹ççãªUIæŽæ°ãå®çŸããŸãïŒ
4. ãã£ã¬ã¯ãã£ã (Directives)
æŠèŠ:
HTMLèŠçŽ ã«ç¹å®ã®æ¯ãèãã衚瀺ã®å€æŽã远å ããä»çµã¿ã§ããAngularã«ã¯æšæºã§å€æ§ãªãã£ã¬ã¯ãã£ããçšæãããå¿
èŠã«å¿ããŠèªäœãå¯èœã§ãðš
äž»ãªçš®é¡:
-
æ§é ãã£ã¬ã¯ãã£ã:
DOMã®æ§é ã倿ŽããŸããäŸãã°ã*ngIf
ã§æ¡ä»¶ä»ã衚瀺ãã*ngFor
ã§ãªã¹ãã¬ã³ããªã³ã°ãå®çŸããŸã<ul> <li *ngFor="let item of items">{{ item }}</li> </ul>
-
屿§ãã£ã¬ã¯ãã£ã:
æ¢åã®èŠçŽ ã«åçãªã¯ã©ã¹ãã¹ã¿ã€ã«ãä»äžããŸããäŸãã°ãngClass
ãngStyle
ã§ã<div [ngClass]="{'highlight': isHighlighted}">ãã€ã©ã€ãä»ãããã¹ã</div>
ãã€ã³ã:
- åçãªDOMæäœãçŽæçã«ã§ããã®ã§ãUIäœæãã°ããšæ¥œãããªããŸãðã
- èªåã®ã¢ã€ãã¢ãåãå ¥ããŠã«ã¹ã¿ãã€ãºããæ¥œãã¿ããããŸãïŒ
5. äŸåæ§æ³šå ¥ïŒDependency Injection, DIïŒãšãµãŒãã¹ (Services)
æŠèŠ:
DIã³ã³ãããå©çšããããšã§ãå
±éæ©èœïŒãµãŒãã¹ïŒãåã³ã³ããŒãã³ãã«å¹ççã«æ³šå
¥ã§ããŸããããã«ãããã³ãŒãã®åå©çšæ§ãé«ãŸãããã¹ãããããããªããŸãð ïž
å ·äœäŸ:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class DataService {
constructor(private http: HttpClient) { }
getData(): Observable<any> {
return this.http.get('https://api.example.com/data');
}
}
å©çšåŽã®ã³ã³ããŒãã³ã:
import { Component, OnInit } from '@angular/core';
import { DataService } from './data.service';
@Component({
selector: 'app-data',
template: `<div *ngIf="data">
<pre>{{ data | json }}</pre>
</div>`
})
export class DataComponent implements OnInit {
data: any;
constructor(private dataService: DataService) { }
ngOnInit() {
this.dataService.getData().subscribe(result => {
this.data = result;
});
}
}
ãã€ã³ã:
- DIã®ãããã§ãã³ãŒããã·ã³ãã«ã«ãŸãšãŸã£ãŠãã¹ãããããããªããŸãð
- ãµãŒãã¹ã掻çšãããšã瀟å ãããžã§ã¯ãã§ãåå©çšæ§ã®é«ãã³ãŒããæžããŸãïŒ
6. ãã€ã (Pipes)
æŠèŠ:
ãã€ãã¯ãããŒã¿ã衚瀺ããåã«ãã©ãŒãããã倿ãè¡ãä»çµã¿ã§ãããã³ãã¬ãŒãå
ã§ç°¡åã«è¡šç€ºåœ¢åŒã倿Žã§ããŸãð
ð¢
䜿çšäŸ:
<p>仿¥ã®æ¥ä»ïŒ{{ today | date:'yyyy/MM/dd' }}</p>
ãã€ã³ã:
- çµã¿èŸŒã¿ãã€ãã«å ããç¬èªã®ãã€ããäœæããããšãå¯èœã§ã
- 衚瀺ããžãã¯ãã·ã³ãã«ã«ä¿ãããã³ãŒããèŠããããªããŸãïŒ
7. ã«ãŒãã£ã³ã° (Routing)
æŠèŠ:
Angularã®ã«ãŒãã£ã³ã°æ©èœã«ãããè€æ°ã®ç»é¢ïŒãã¥ãŒïŒã®ç®¡çãã§ããURLãšã³ã³ããŒãã³ãã®å¯Ÿå¿ä»ããè¡ããŸããããã«ãã£ãŠããŠãŒã¶ãŒãçŽæçã«æäœã§ããã¢ããªã±ãŒã·ã§ã³ãå®çŸããŸãðºïž
äž»ãªæ©èœ:
-
ã«ãŒãå®çŸ©:
URLãšå¯Ÿå¿ããã³ã³ããŒãã³ããæå®ããŠãã¢ããªå šäœã®ããã²ãŒã·ã§ã³ã管çããŸã -
ã«ãŒããã©ã¡ãŒã¿:
URLå ã®ãã©ã¡ãŒã¿ãå©çšããåçãªã³ã³ãã³ã衚瀺ãå®çŸããŸã
ãã€ã³ã:
- æ£ç¢ºãªã«ãŒãèšå®ã§ã䜿ããããããã²ãŒã·ã§ã³ãå®çŸãã瀟å åãã§ããããããããªããŸã
- Lazy Loadingã䜿ãã°ãåå衚瀺é床ãããã«åäžããŸãïŒ
ãŸãšã
æ¬èšäºã§ã¯ãAngular2ã®æŠèŠãäž»èŠãªåºæ¬æŠå¿µãå³è§£ãã·ã³ãã«ãªãœãŒã¹ã³ãŒãäŸãå®è¡æé ã«å ããååºæ¬æŠå¿µã«ã€ããŠè©³çްã«è§£èª¬ããŸãã
- ã³ã³ããŒãã³ã: UIãæ§æããåå©çšæ§ã®é«ããããã¯ð§©
- ã¢ãžã¥ãŒã«: æ©èœããšã«æŽçããäŸåé¢ä¿ãæç¢ºã«ããä»çµã¿ðŠ
- ããŒã¿ãã€ã³ãã£ã³ã°: ãŠãŒã¶ãŒæäœãšããŒã¿ãåæ¹åã«åæããåçãªUIæŽæ°ãå®çŸð
- ãã£ã¬ã¯ãã£ã: HTMLèŠçŽ ã«åçãªæ¯ãèãã远å ããããã®ä»çµã¿ðš
- äŸåæ§æ³šå ¥ãšãµãŒãã¹: ã³ãŒãã®åé¢ãšåå©çšæ§åäžãç®æãåºæ¬ãã¿ãŒã³ð ïž
- ãã€ã: ããŒã¿ã®ãã©ãŒããã倿ãã·ã³ãã«ã«å®è£ ð
- ã«ãŒãã£ã³ã°: è€æ°ã®ãã¥ãŒç®¡çãšãŠãŒã¶ãŒæäœã«å¿ããåçãªç»é¢é·ç§»ãæäŸðºïž
Angular2ã®åæŠå¿µã¯ãã©ããéåžžã«ãã¯ãã«ã§ããããããã飿ºããããšã§ã¹ã±ãŒã©ãã«ã§ä¿å®æ§ã®é«ãWebã¢ããªã±ãŒã·ã§ã³ãå®çŸã§ããŸãïŒð
ç§ã®åããŠã®ææŠãéããŠæããæ¥œãããé©ãããã¿ãªããã«ããã²äœéšããŠããã ããã°ãšæããŸãããããããã瀟å
ã§ã®åŠç¿ãéããŠæ¥œããæé·ããŠããæ§åãçºä¿¡ããŠãããŸãã®ã§ãã©ãããããããé¡ãããŸãïŒðâš