2015-07-03 95 views
0

我有这个滤波器一刻不更新:角过滤结果在UI

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; 
    } 
    }; 
} 

我有这个网站:

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

我看到越来越呼吁消化循环过滤器,和在控制台中记录的相对时间看起来不错。 I.E.它从1分钟前,2分钟前等等...然而,UI永远不会更新过滤器返回。

第一个调用反映在用户界面上,但之后用户界面不会更新。

我在做什么错?

编辑:

该HTML是NG重复,通过ID追踪内。我假设因为对象中没有任何变化(当前时间刚刚移动),该角度从未检测到该对象的任何内容。

还不知道如何解决这个问题。

回答

0

你是否尝试通过更改对象散列?通常如果你改变对象的哈希代码框架,会理解对象被修改并呈现更新的对象。

+0

我可以做到这一点,但我不想改变对象。它并没有真正改变。对象上的时间戳是相同的,只是实时只是继续前进。这意味着我必须附加一个计时器或其他东西来消化循环来循环集合中的所有对象,并更改散列或变量。在这一点上,我可以创建一个名为'fromNow'的新范围变量,并且每隔一段时间就设置一次。仍然是手动步骤。 – lostintranslation

+0

你有没有闯入者?如果可能,请给予一个链接器链接。对于理解你的问题会更好。 –

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; 
} 
+0

非常真实。但是我仍然认为角度不是重新评估ng-repeat中的所有对象,因为它们都没有改变。由于它不在摘要循环中重新计算,因此无论有状态如何,过滤器都不会重新运行。 – lostintranslation

+0

@lostintranslation有状态过滤器每个摘要循环至少运行一次。 – zeroflagL