実際のところ、あなたの機能はすでに Angular Docs でかなり詳細に説明されています。
これらの種類のものには、ディレクティブを使用する必要があります。フィルター処理ロジックをフィルター関数内に保持するか、「時間前」ロジック全体をディレクティブ内に配置するかを選択できます。どちらの方法でも構いません。
JS:
app.filter('fromNow', function () {
return function (date) {
return moment(date).fromNow();
};
});
app.directive('time',
[
'$timeout',
'$filter',
function($timeout, $filter) {
return function(scope, element, attrs) {
var time = attrs.time;
var intervalLength = 1000 * 10; // 10 seconds
var filter = $filter('fromNow');
function updateTime() {
element.text(filter(time));
}
function updateLater() {
timeoutId = $timeout(function() {
updateTime();
updateLater();
}, intervalLength);
}
element.bind('$destroy', function() {
$timeout.cancel(timeoutId);
});
updateTime();
updateLater();
};
}
]
);
HTML:
<div ng-controller="AppController">
Time: <span time="2013-03-23 21:56"></span>
</div>
プランカー
繰り返しになりますが、Directive Docsを見ると、この解決策は、そのページにあるディレクティブの例のほぼ完全なぼったくりであることがわかります。