我正在使用过滤器来显示自添加内容以来的时间:
angular.module('filters').('fromNow', function () {
return function (date) {
return moment(date).fromNow();
}
});
如何每分钟自动触发过滤器,以便刷新之前的时间。我可以在过滤器中使用 $timeout 来实现这一点吗?
谢谢!
我正在使用过滤器来显示自添加内容以来的时间:
angular.module('filters').('fromNow', function () {
return function (date) {
return moment(date).fromNow();
}
});
如何每分钟自动触发过滤器,以便刷新之前的时间。我可以在过滤器中使用 $timeout 来实现这一点吗?
谢谢!
事实上,您的功能实际上已经在 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,您会发现该解决方案几乎完全抄袭了该页面上的指令示例。