2017-02-10 96 views
2

我想要AngularJS过滤器timeAgo应该应用于时间戳以显示时间戳从时间戳。这是一个容易:AngularJS:如何实现Live TimeAgo过滤器?

filter('timeago', function() { 
    return function(input) { 
    return Date.now() - input; 
    } 
}); 

但是,当我想让它LIVE(当用户在页面上 - 我们更新值每秒/每摘要)它似乎并不那么容易。我们不会更改输入值,因此不会重新计算过滤器。 是否有可能在不添加额外参数的情况下每秒重新计算一次?

Fiddle示例。

  • 我不在寻找现成的图书馆(如角时刻)。对于我如何在AngularJs中实现这样的概念更有意思。
+0

你能解释为什么你想让这样的过滤器不是一个指令吗?还有其他例子吗? –

+0

它应该做的角度相同amTimeAgo过滤器 –

回答

1

这是因为过滤器现在是无状态的,以使其成为此过滤器工作,你需要做的:

function timeagoFilter(input) { 
    return Date.now() - input; 
} 

timeagoFilter.$stateful = true; 

return timeagoFilter; 

而我个人倒把它变成一个指令,并改变与价值普通的javascript - 如果仅仅是为了显示的目的 - 因为很容易搞乱文摘周期并使应用程序性能下降

+0

太棒了!这就是我一直在寻找 –

+0

这个过滤器不会工作,如果您的摘要需要超过1毫秒。实际上它以$ rootScope:infdig错误结束。 –

+0

@PetrAveryanov我认为你做错了,如果你有无限的摘要错误 – maurycy