角度过滤结果未在UI中更新

时间:2015-07-03 15:40:27

标签: angularjs angular-filters

我暂时有这个过滤器:

function momentFilter() {
  return function(input, format) {
    if (!input) return null;

    if (format == 'fromNow') {
        var fn =  moment(input).fromNow();
        console.log('fromNow called with: ' + input + ' giving result: ' + fn);
        return fn;
    } 
  };
}

我有这个HTML:

<div>{{timestamp | moment: 'fromNow'}}</div>

我看到过滤器在摘要周期中被调用,并且在控制台中记录的相对时间看起来很棒。 I.E.它从1分钟前,2分钟前等等...然而,UI永远不会更新过滤器返回的内容。

第一个调用反映在UI上,但之后UI永远不会更新。

我做错了什么?

修改

该html位于按id跟踪的ng-repeat内。我假设因为对象实际上没有任何改变(当前时间刚刚移动),该角度永远不会检测到该对象的任何内容。

仍然不确定如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

您是否尝试过更改对象哈希?通常如果您更改对象哈希代码框架将理解对象被修改并呈现更新的对象。

答案 1 :(得分:0)

假设过滤器是幂等的,即相同的输入总是导致相同的输出。由于timestamp没有改变,因此Angular没有理由做任何事情。

如果你的过滤器是有状态的,并且输出可以随每次调用而改变,那么你必须相应地标记它。

function momentFilter() {
  function filter(input, format) {
    if (!input) return null;

    if (format == 'fromNow') {
      var fn =  moment(input).fromNow();
      console.log('fromNow called with: ' + input + ' giving result: ' + fn);
      return fn;
    } 
  };

  filter.$stateful = true;
  return filter;
}