[英]AngularJs error when usin track by $index with filter in a ng-repeat
[英]When not to use 'track by $index' in an AngularJS ng-repeat?
它有一個disadvantage
,
'track by'
表達式按數組中的索引進行跟蹤。 這意味着只要索引保持不變,angularjs 就會認為它是同一個對象。
所以如果你替換數組中的任何對象,angularjs 認為它沒有改變,因為數組中的索引仍然相同。 因此,更改檢測不會在您期望的時候觸發。
看看這個example
嘗試更改名稱,沒有任何反應。 按索引刪除軌道,它有效。 按 item.name 添加軌道,它仍然有效。
避免track by $index
原因有很多
track by $index
track by $index
track by $index
問題的其他示例track by $index
該文檔特別指出在使用一次性綁定時應避免track by $index
進行track by $index
。
從文檔:
當重復模板包含一次性綁定時,避免使用
track by $index
。 在這種情況下,第nth
DOM 元素將始終與數組的nth
項目匹配,因此即使相應項目發生更改,該元素上的綁定也不會更新,從而導致視圖與基礎數據。
track by $index
當有一個唯一的屬性標識符可以使用時,避免track by $index
。 當處理所有唯一的對象時,最好讓ng-repeat
使用它自己的跟蹤,而不是track by $index
覆蓋track by $index
。
從文檔:
如果您正在使用具有唯一標識符屬性的對象,則應通過此標識符而不是對象實例進行跟蹤。 如果您稍后重新加載數據,
ngRepeat
將不必為它已經呈現的項目重建 DOM 元素,即使集合中的 JavaScript 對象已被新對象替換。 對於大型集合,這顯着提高了渲染性能。
track by $index
問題的其他示例在對象數組中添加和刪除對象時,我也遇到過問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.