Angular2 コンポーネントについて

Angular2 コンポーネントについて、
覚えた事をまとめておく。

前回作成したhelloコンポーネントを使ってコンポーネントの動きについてみてみる。
前回の記事

コンポーネントは、HTML, CSS, TypeScriptの3つから構成される。

hello コンポーネントの場合は、

  • hello.component.html
  • hello.component.css
  • hello.component.ts

といった感じで3つのファイルが生成される。

CSS

CSSファイルは特に説明する必要はなさそう。

ただ、一つのコンポーネントの中でローカルに定義される為、

他のコンポーネントにstyleの影響を与えることがなくなっている。

例えば以下のように、DIVタグに対するstyleを記述しても、
このコンポート内のDIVタグにのみスタイルが適用される。

div { backgroud: yellow; }

仕組みは、作成したコンポーネントのタグには、
_ngcontent-c0 のようなコンポーネント番号のようなユニークな
タグ属性が自動で追加されている。

そして、cssは、[_ngcontent-c0] を付けた形に自動的に展開されるため、
コンポーネントごとにローカルなスタイルが指定可能になっている。

<style>div[_ngcontent-c0] { background: yellow; }</style>

HTML

HTMLファイルは、普段のHTMLタグがそのまま利用できるが、
Angular2 用の特殊な書き方ができる。

片方向バインド

TS側の変数やメソッドの出力結果を、HTML側に出力

<div>Your Name: {{name}}</div>
<div>Your Name: {{foo()}}</div>

{{ }} で囲った部分が、TS側のメンバー変数とメソッドとなる。

双方向バインド

TS側の変数をHTML側の入力値や出力値として同期させる。

<input [(ngModel)]="name"/>

name の部分が、TS側のメンバ変数。
inputで入力した内容が、nameメンバ変数と同期される。

メソッドを指定する事はできない。

ループ

<ul>
  <li *ngFor="let val of [1,2,3];">{{val}}</li>
</ul>

3つのli要素が生成される。[1,2,3] の部分は、TS側のArray型のメンバ変数にする事も可能。

イベント

<button (click)="test($event)">TEST</button>

ボタンをクリックした時に、TS側のメンバメソッドをコールする事が可能。

click 以外にも、change/dblclick/blur など色々ある。

TypeScript

hello.component.ts

import {Component, OnInit} from '@angular/core';

@Component({
  selector: 'app-hello',
  templateUrl: './hello.component.html',
  styleUrls: ['./hello.component.css']
})
export class HelloComponent implements OnInit {

  name: string = "tyabuta";

  constructor() {
    // クラス生成時
  }

  ngOnInit() {
    // HTML読み込みが完了した時
  }

  test(e: Object) {
    console.log(e);
  }

  foo() {
  }
}

@Component アノテーション

selector: 'app-hello'

作成したコンポーネントをHTMLで挿入する際につかうタグ名になる。

上記の場合、<app-hello></app-hello> というタグを使う事で、今回作成したコンポーネントが展開される。

templateUrl: './hello.component.html',

HTMLとなるファイルのパスを指定する(TSファイルからの相対PATHでいいのかな?)

template: '<p>hoge</p>' のようにする事で、ファイルじゃなくて、直接HTMLを文字列で指定する事も可能。

styleUrls: ['./hello.component.css']

templateUrl と同様、CSSファイルの指定。
こちらも同様に styleとすることで、文字列で直接指定する事ができる。

Plunker

Plunkerというサービスを使えば、てっとり速くAnguler2 のサンプルに触れる事ができる。

Plunker: Anguler2 Live Example

Plunkerっていろんなテンプレートが公開されているので、
自分にあったものを使ったり用意できるんですね。


1件のコメント

コメントを残す