この素晴らしきフロントエンドに祝福を

アニヲタからフロントエンドエンジニアへ転身した私の備忘録。

angular2入門【コンポーネント編②】

ゼットンです。
前回は自動生成されたソースを見ながら
Componentについて説明しました。
今回はここに新たなコンポーネントを追加してみます。

Componentの追加

https://www.evernote.com/l/AS3JgkcxhaFC64vs3XvIx6UfOeMDShxnMJoB/image.png

src>appフォルダにchild.component.tsというファイルを
追加します。
中身は下記のようにします。

https://www.evernote.com/l/AS3bPgo-SM9ClqezkAQXKVXYLSMa1NPN6QwB/image.png

タグ名はapp-childとします。
名前はなんでもいいですが、
独自定義のタグはapp-xxにするとか
ルールを設けとくと標準のタグと
すぐに見分けがついていいと思います。
そんで、変数titleにchild component!という
文字列を格納します。

ではでは、このChildコンポーネント
前回説明したapp-rootの中で使いたいと思います。

というわけで、
app-rootに下記の実装を追加。

https://www.evernote.com/l/AS2_CbX8AmxM65wlVBcE8ni_HhSHu6OhvhoB/image.png

import文で先ほどのchildコンポーネントを読み込みます。
ここはファイル名で指定します。
そんで、タグ名をHTML部分に書いてあげてます。
つまり、ファイルを読み込み、タグ名で呼び出しているというわけ。
なんとなく動きそうな気がします!
ng serveコマンドを打って、
http://localhost:4200にアクセスしてみましょう。

https://www.evernote.com/l/AS2GnsHrjL9AbYPqp35gQRLVOjGZWzU_VYgB/image.png

おやぁ?

https://www.evernote.com/l/AS2UKoX7S1BC5oRHv0PZRW0vsGlMlsH2wsEB/image.png

ゆう〜〜〜
大丈夫だよ〜〜〜
こういうときはブラウザ上でF12を
押すんだよ〜〜〜

https://www.evernote.com/l/AS2z7prydrpB8JzCw2fado2yB696yv1ZQJgB/image.png

こうすると開発者モードに移行し、
デバッグコンソールが見れます。
おや、なんかエラーが出てますね。なになに

https://www.evernote.com/l/AS2ZkglIgBhIRp-hWTIm2MrFcP5u3V5BTKoB/image.png

https://www.evernote.com/l/AS2drXm1RH1CLYRHzunO7lmdctQrltdxZHgB/image.png

それな!
いや、でもここは避けて通れないから
頑張ろう。
とりあえず最初の3行だけでも・・・。

https://www.evernote.com/l/AS2vAR0O271JBKL7zKyvHYltHQWULwAuaJMB/image.png

んー、テンプレートエラー?
HTML部分でエラー?
app-childなんて知らないって??
お、頑張れば読めるぞ!NEW HORIZONレベルの英語だ!
app-childがangularのコンポーネントなら
このモジュールの一部かどうか確かめなさい。

モジュールってなんぞ・・・?

https://www.evernote.com/l/AS0cmfGUlvtNf62a34rtsm-kBmicbLrZmE8B/image.png

実は新たに追加したコンポーネントを使うためには、
モジュールに追加する必要があるんです。

モジュールとは、複数のコンポーネントを束ねる役割をします。
正しくはコンポーネントだけでなく、
パイプやサービス、ディレクティブなどもそうですし、
モジュールの中にモジュールを含めることもできます。
あらゆる部品をパッケージ化する単位という感じ。

そのモジュールというのがここでいうと
app.module.tsです。
とりあえずファイルを開けてみます。

https://www.evernote.com/l/AS1Mhj_XzodGzr8LcsVihUBQK3TWpBqk5F8B/image.png

いろいろ書いてありますが、
要はモジュールに含めるものを定義してます。
内訳はこんな感じ。

https://www.evernote.com/l/AS1-nb7veE9HQZRCAqOxTE3_S106NasCdnIB/image.png

ここの詳しい説明はおいおいします。
というわけで、
これにchildコンポーネントを追加すべく、
次のような実装を加えます。

https://www.evernote.com/l/AS3XIPB1v3lGbYWXPdTrU_MgYJqR6NfvE4QB/image.png

新たにコンポーネントを追加するので、
ファイルを読み込んでdeclarationsに追加するわけです。
これでブラウザを見てみるとー

https://www.evernote.com/l/AS0dkV_Xmd5LS4rcUN7NkOZzi8GaugXLijAB/image.png

いけました!

https://www.evernote.com/l/AS1qtzkXgQlEva6X3jPZN9zYF5T_EPCgZvsB/image.png

こんな感じで、新たに追加したものを使いたい場合は
同一のモジュールに含めてあげることをお忘れなく!

次回はパイプを扱ってみます。
ではでは。