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

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

angular2入門【パイプ編②】

こんにちわ
ゼットンです。

前回はangular2の組み込みパイプについて
扱いました。
今回のテーマはカスタムパイプです。

カスタムパイプ

カスタムパイプとは
独自に定義したパイプです。
例えば前回UpperCaseパイプやDateパイプを
使ってサクッと表記の変更をしました。
あのような機能を勝手に作れちゃうんですね。
もちろん変換部分はそれぞれで実装が必要ですが。
ではやってみましょう。

まずは例によって、ng newをした直後の
Hello world状態からスタート。

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

app-rootタグの中身です。
デフォルト状態だとコンポーネント内が分割されて見通しが悪いので、
1ファイルにまとめてあります。ここは気になさらず。

ではapp-rootタグと同じ階層に
カスタムパイプ用のtsファイルを追加しましょう。
名前は「hina.pipe.ts」でいきましょうか。

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

中身はこんな感じで実装してみました。

https://www.evernote.com/l/AS3HkmeQIqpPeoY7Q4cdUHsmAzB-QVS6iSEB/image.png

カスタムパイプは@angular/coreからPipeとPipeTransformを
インポートして作成します。
@Pipeのnameプロパティにパイプの名前を指定しています。
中の実装については、簡単すぎるので説明しません。
後の動作確認で全てわかります。

ではこのパイプを使うために、
app-rootタグの中身をちょこっと変えちゃいます。

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

画面は以下のような感じ。
テキストボックスに入力すると・・・

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

即座に画面に描画されるようになっています。
inputタグに#inputという形で
Template Syntaxを付加し、
pタグ内でバリューを取り出しているという実装です。
ここについては追々詳しく話せたらと思います。
そんで、今回はパイプ!ですね。
ここに、先ほど作成したhinaパイプを実装してみます。
とは言っても簡単です。こんな感じ。

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

ファイルをimportして
組み込みパイプと同じようにパイプ名で呼び出しています。
パイプ名は先ほど@Pipeのnameプロパティに
設定してあげた名前です。

そんで画面を見てみると・・・

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

おやぁ?
Loadingから動きません。
これはエラってるやーつですね。
F12を押してコンソールを確認すると

https://www.evernote.com/l/AS0PiUwckVhKmLvufgj3zbX5KXu-FeHNBUAB/image.png

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

大丈夫!
おいたんに任せろ!
このエラーは前に見たことあるぞ!!(前々回を参照)

このエラーの原因は、

カスタムパイプをモジュールに追加していないから

です。

というわけで、
hinaパイプをモジュールに追加してやりましょう。
app.module.tsに追記します。

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

コンポーネントと同様に、
パイプを追加した場合もモジュールのdeclationsに追加
してあげないといけません。
これでhinaパイプが使えるようになりました。

では、動作確認をしましょう。

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

まずは誤動作しないか、
適当な文字列を入力しましょう。

https://www.evernote.com/l/AS06FHi4icFP25gjnXE-9poQm0_TuY4LuIwB/image.png

大丈夫ですね。
ひなパイプは反応してません。

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

こちらも大丈夫です。
ひなパイプは反応してません。

では、
最後に「ひな」と入力してみます。

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

ドクン・・・ッ

https://www.evernote.com/l/AS0ubNHJ0utFVbO-u7OdQjeHXSNmWeA-aowB/image.png

キターーーーーーーーーーーーーーーーーーーー!!!!

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

次回はディレクティブでも扱いますか。