【问题标题】:AngularJS: How to implement Live TimeAgo filter?AngularJS:如何实现 Live TimeAgo 过滤器?
【发布时间】:2017-02-10 09:37:45
【问题描述】:

我希望 AngularJS 过滤 timeAgo 应该应用于时间戳以显示从时间戳传递的时间。这很简单:

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

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

Fiddle 示例。

  • 我不是在寻找现成的库(如角矩)。如何在 AngularJs 中实现这样的概念对我来说更有趣。

【问题讨论】:

  • 你能解释一下为什么你想让这样的过滤器不是指令吗?还有其他用法吗?
  • 它应该和 angular-moment amTimeAgo 过滤器一样

标签: angularjs angularjs-filter


【解决方案1】:

发生这种情况是因为过滤器现在是无状态的,要使其适用于此过滤器,您需要执行以下操作:

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

timeagoFilter.$stateful = true;

return timeagoFilter;

但我个人会将其转换为指令并使用纯 javascript 更改值 - 如果它只是为了显示目的 - 因为它很容易搞乱摘要循环并使应用程序性能下降

【讨论】:

  • 太棒了!这就是我一直在寻找的
  • 如果您的摘要花费超过 ~1 毫秒,此过滤器将不起作用。实际上它以 $rootScope:infdig 错误结束。
  • @PetrAveryanov 我认为如果您遇到无限摘要错误,您做错了什么
  • 不,很明显第一个摘要过滤器返回即 10。第二个摘要 - 11. 第三个 12. 等等 值永远不会相同。 >> 错误
  • 您可能对一些事情和摘要的作用感到困惑
猜你喜欢
  • 2018-09-11
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 2021-08-31
  • 2020-05-12
  • 2012-05-09
  • 1970-01-01
相关资源
最近更新 更多