2015-07-03 64 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