2017-04-04 62 views
0

我有一個簡單Angular2模板,看起來像這樣:項目後消失到10秒[Angular2,* ngFor]

<span *ngFor="let message of messages"> 
    {{ message.content }} 
</span> 

和它背後的相應TS邏輯:

let a = new Map(); 
for(let i = 0; i < 100; i++) { 
    a.set(i, { content: i.toString() }); 
} 

this.messages = a.values(); 

我可以看到我的視圖中有100個項目的列表,但幾秒鐘後(從5秒到15秒),它們消失而沒有任何錯誤/警告。

這是怎麼發生的?

+0

Plunker或任何其他工作,例如最小的將是有益的。 –

+0

@Kinduser我創建了一個plunkr,但它似乎並沒有在所有的工作。我不確定這個錯誤是否會立即發生,或者我做錯了什麼:https://plnkr.co/edit/US3uPVe4jVfElGNkOXCx?p=preview – alexandernst

回答

0

事實上,因爲for循環迭代結束在map變量之前,你的messages變量分配空(在那一刻)map元素,您沒有收到任何明顯的變化。

可能的解決方案添加setTimeout功能等的循環來完成。

setTimeout(() => { 
    this.messages = a.values(); 
}, 200); 

Plunker link

注意:各位程序員,我們有一個小問題在這裏,怎麼可能是a.values()函數不等待循環結束?它表現得像一個asynchro呼叫......我能與setTimeout修復它,但它不是有效的在更長期的。

任何人有任何想法,爲什麼它的工作原理這樣?

+0

好的,這解決了PLUNK問題,但它不會觸發我的最初的問題。爲什麼數據可能會消失?我怎麼能調試它的根本原因? – alexandernst

+0

@alexandernst老實說,在plunker中的這個問題值得一個單獨的問題,因爲在'for'循環結束之前調用'.values()'函數是可能的嗎?這很奇怪,這個問題需要比我更聰明的人。關於你的問題 - 這很難判斷它爲什麼會消失,value()函數對我來說似乎是可疑的。 –

+1

是的,我也這麼想。也許'values()'正在創建一些Chrome的GC在幾秒鐘後刪除的時間迭代器,因爲它無法正確檢測到Angular仍在使用它? – alexandernst