機能は揃いましたが見た目がシンプルなので、マテリアルデザインにリニューアルしてみましょう。 今回は、Angular MaterialというAngular公式のライブラリを使います。
次のコマンドを実行して、Angular Materialをインストールします。
$ npm install @angular/material
インストールしたら、Angular Materialが提供するテーマCSSを、src/styles.css
で読み込みます。
@import '~@angular/material/prebuilt-themes/indigo-pink.css';
Angular Materialの機能を使うには、@angular/materal
が提供するMaterialModule
を読み込む必要があります。
src/app/app.module.ts
を開き、NgModule
デコレーターのimports
にMaterialModule.forRoot()
を追加します。
import { MaterialModule } from '@angular/material';
@NgModule({
declarations: [
AppComponent,
TodoListComponent,
TodoFormComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
MaterialModule.forRoot(),
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
これで準備完了です。
それでは順番にAngular Materialが提供するコンポーネントに置き換えていきます。
まずはTodoFormComponent
のテキストボックスとボタンです。
<input>
要素に対応するのは、<md-input-container>
コンポーネントと、mdInput
ディレクティブです。
<input>
要素を<md-input-container>
要素に囲み、mdInput
属性を<input>
要素に追加します。
また、placeholder
属性を設定すると、ラベルとしても機能してくれます。
<md-input-container>
<input mdInput type="text" [(ngModel)]="title" placeholder="Title">
</md-input-container>
次はボタンです。こちらは、<button>
要素にmd-button
属性とcolor
属性を付与するだけです。
<button md-button color="primary" (click)="create()">Create</button>
md-raised-button
属性にすれば、浮き上がってさらに目立つボタンになります。
<button md-raised-button color="primary" (click)="create()">Create</button>
<ul>
要素と<li>
要素は、それぞれ<md-list>
要素と<md-list-item>
要素に置き換えます。
<md-list>
<md-list-item *ngFor="let todo of todoList" [class.completed]="todo.completed">
<input type="checkbox" [(ngModel)]="todo.completed">
{{ todo.title }}
</md-list-item>
</md-list>
チェックボックスは<md-checkbox>
要素に置き換えます。
この時、<md-checkbox>
要素の内側に{{todo.title}}
を移動します。
<md-checkbox [(ngModel)]="todo.completed">{{ todo.title }}</md-checkbox>
いい感じの見た目になってきましたね。次が最後のひと押しです。
最後に、今までただ<h1>
要素で表示していたタイトルを、マテリアルデザインのツールバーにしてみましょう。
ツールバーは<md-toolbar>
要素を使います。タイトル部分は<span>
要素に変更し、テーマの_primary_カラーを使うように指定します。
<md-toolbar color="primary">
<span>{{title}}</span>
</md-toolbar>
あっという間に素敵なアプリケーションに生まれ変わりました。 これでこのハンズオンは終了です。お疲れ様でした!
今回のハンズオンで使ったのは、Angularが提供する機能のごく一部です。 もっと深く知りたい人は、以下のドキュメントを参考にすると良いでしょう。