問題
angularのViewで(not controller)華麗にencodeURIComponent
とかしたいじゃないですか、こんな感じで
<a href="/tasks/{{task.id | encodeURIComponent}}">{{task.name}}</a>
filterをカスタマイズしよう
angular.module('myapp', []).filter("encodeURIComponent", function() { return window.encodeURIComponent; });
注意:functionを返すこと
他にも、
GMTなcron文字列を、JSTな日本語っぽくしたい
00 0 4 * * *
これを
毎曜日 毎月 毎日 13時 0分 00秒
こうじゃ
angular.module('myapp', []).filter('cron_humanize', function() { return function(input) { return _.chain(input.split(' ')).reverse().map(function(el) { if (el === '*') return '毎'; return el; }).map(function(el, i) { switch (i) { case 0: return el + '曜日'; case 1: return el + '月'; case 2: return el + '日'; case 3: return (el === '毎') ? el : (((el|0) + 9) % 24) + '時'; case 4: return el + '分'; case 5: return el + '秒'; } }).value().join(' '); }; });
こうやって呼ぶ
<span>{{job.cron_string | cron_humanize}}</span>
実装は雑だけどまあ、フィルターのカスタマイズ方法の備忘録として
DRY