やりたい事
- true、false を HTML では任意のフォーマットに変換して表示したい。
- たとえば、true ⇒ ○、false ⇒ ×
- AngularJS を使いたい。
調べてみますと、フィルタという機能を使えば、たとえば「1」を「$1」と表示形式を指定できるようです。
さらに、自作のフィルタも作ることができるそうですので、やってみました♪
カスタムフィルタのサンプルコード
- HTML で {{true | boolean:’○’:’×’}} と書いたなら、boolean 部分が今回作った関数に結びつき、呼び出される。
- return function(boolean, true_format, false_format) { とあり、
- 引数 boolean に HTML の true が入る。
- 引数 true_format に HTML の ‘○’ が入る。
- 引数 false_format に HTML の ‘×’ が入る。
index.html
<!DOCTYPE html> <html lang="ja" ng-app="customFilterApp"> <head> <meta charset="UTF-8"> <title> Boolean を任意のフォーマットで表示する AngularJS のカスタムフィルターサンプル</title> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js"></script> <script> angular.module('customFilterApp', []) /** * 要求されたフォーマットに基づいて、Boolean をフォーマットして返却します。 * * @param {boolean} boolean true、またh false * @param {string} true_format true のフォーマット後の返却オブジェクト * @param {string} false_format false のフォーマット後の返却オブジェクト * @returns フォーマットしたオブジェクト。または、引数が Boolean 以外の場合は空文字 */ .filter('boolean', function() { return function(boolean, trueFormat, falseFormat) { var word = ''; if (boolean === true) { word = trueFormat; } else if (boolean === false) { word = falseFormat; } return word; } }); </script> </head> <body> <h2>例1. true を '○' に、false を '×' に変換して表示</h2> <p> <span ng-non-bindable>{{true | boolean:'○':'×'}} → </span> <span>{{true | boolean:'○':'×'}}</span> </p> <p> <span ng-non-bindable>{{false | boolean:'○':'×'}} → </span> <span>{{false | boolean:'○':'×'}}</span> </p> <h2>例2. true を '達成!' に、false を '未達成です。ガンバロ!' に変換して表示</h2> <h3>例2-1. 正常系</h3> <p> <span ng-non-bindable>{{true | boolean:'達成!':'未達成です。ガンバロ!'}} → </span> <span>{{true | boolean:'達成!':'未達成です。ガンバロ!'}}</span> </p> <p> <span ng-non-bindable>{{false | boolean:'達成!':'未達成です。ガンバロ!'}} → </span> <span>{{false | boolean:'達成!':'未達成です。ガンバロ!'}}</span> </p> <h3>例2-2. 異常系。true、false 以外だと、なにも表示されない</h3> <p> <span ng-non-bindable>{{aaaaa | boolean:'達成!':'未達成です。ガンバロ!'}} → </span> <span>{{aaaaa | boolean:'達成!':'未達成です。ガンバロ!'}}</span> </p> </body> </html>
サンプルコードを実行した表示結果
おわりに
最初、参考書『AngularJSアプリケーション開発ガイド』を頼りに自分の頭だけで考えてプログラミングいたしました。
P44、2.5 フィルタを使ったデータ形式の指定、の部分ですわ。
完成して満足!充実感♪と浸っているときに、ふと検索してみましたら、次のページのように同じことを考え、作った方がいらっしゃいました。車輪の再開発してしまいましたの><。
ですけれども、コードを比較したり、他のカスタムフィルタを見て、大変勉強になりました。ありがとう存じます!
その後、悔しいですので AngularJS のフィルタについて更に勉強して、フォーマット後の文字列も指定できるように書きなおしました。
その際、メソッドコメントの書き方、引数の名前の付け方、変数や return の指定の仕方、などAngularJS のソースが大変参考になりました。
- angular.js/filters.js at master · angular/angular.js · GitHub
→ dateFilter 部分
以上です。