前回の投稿Angluar2のクイックスタートとチュートリアルを実施 - その1の続きです。
前回作成したソースを使用します。
###本投稿の参照元(英語)
(バージョンが異なりますが、大きな影響はないと思います。)
The Hero Editor - ts
###本章で学ぶこと
以下を学習します。
- htmlテンプレートの二重波カッコ部分
{{ほにゃらら}}
を動的に書き換えられること - htmlの
<input>
タグとngModel
ディレクティブによる2ウェイデータバインディング
###実行結果
本章を完了すると以下リンク先のようなものが出来上がります。
テキストボックスに入力された値により即座に表示します。
live-examples
###事前準備
プロジェクトフォルダ名を前回作成したクイックスタートからチュートリアル(Tour Of Heroes)用にリネームします。
リネーム前:angular2-quickstart
リネーム後:angular2-tour-of-heroes
以下のコマンドによりサーバの起動を行います。プログラムの変更が即座にブラウザに反映されます。
cd angular2-tour-of-heroes
npm start
#ヒーローの表示
AppComponent
クラスにtitle
とhero
プロパティ(変数)を以下の様に追加します。
export class AppComponent {
title = 'Tour of Heroes';
hero = 'Windstorm';
}
続いてComponentデコレータのテンプレートに、追加したtitle
とhero
プロパティを表示する様に変更します。
@Component({
selector: 'my-app',
template: '<h1>{{title}}</h1><h2>{{hero}} details!</h2>'
})
ブラウザが自動的に更新されない場合、手動更新してください。
二重波カッコ{{ほにゃらら}}
部分が、title
とhero
プロパティに書き換えられます。
本項の詳細はDisplaying Data chapter(英語)
ヒーローオブジェクト
次に、表示するヒーローをオブジェクトとして扱うため、ヒーロークラスを追加します。
Hero
クラスはid
とname
プロパティを持ちます。1
export class Hero {
id: number;
name: string;
}
先ほど定義したAppComponent
クラスのhero
プロパティをstring
の定数から
Hero
クラスに書き換えます。
export class AppComponent {
title = 'Tour of Heroes';
hero: Hero = {
id: 1,
name: 'Windstorm'
};
}
最後にhtmlのテンプレートもhero
オブジェクトのプロパティid
,name
を取得する様に書き換えます。
@Component({
selector: 'my-app',
template: `
<h1>{{title}}</h1>
<h2>{{hero.name}}details!</h2>
<div><label>id: </label>{{hero.id}}</div>
<div><label>name: </label>{{hero.name}}</div>
`
})
ヒーロー名の編集機能
現在のhtmlテンプレートに<input>
タグを追加しても、テキストボックスの内容は一方向のデータバイングのため、ラベルには反映されません。ここでツーウェイデータバインディングを使用します。
2ウェイデータバインディング
form
からの入力により、表示される値を変更するためには以下を行います。
-
app.module.ts
にFormsModule
をimport
する -
NgModule
デコレータのimports
部分にFormsModule
を追加する
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
@NgModule({
imports: [
BrowserModule,
FormsModule
],
declarations: [
AppComponent
],
bootstrap: [ AppComponent ]
})
export class AppModule { }
FormsModuleについて(英語)
ngModelについて(英語)
app.component.ts
のhtmlテンプレートをngModel
によるツーウェイバインディングを行う様に変更します。ngModel
はforms
パッケージに含まれます。
template: `
<h1>{{title}}</h1>
<h2>{{hero.name}} details!</h2>
<div><label>id: </label>{{hero.id}}</div>
<div>
<label>name: </label>
<input [(ngModel)]="hero.name" placeholder="name">
</div>
`
これで、<input>
の変更内容が即座に<div>
の内容に伝わります。
本章は以上です。次章では、ヒーローの一覧を表示し、選択することでヒーローの詳細を表示するアプリを作成します。
-
TypeScriptでは、型情報を持たせることができます。この場合、
id
プロパティに数値型、name
プロパティに文字列型を持たせています。 ↩