2014-03-07 33 views
1

我有一些嵌套的控制器,每個調用ng-repeat。嵌套ng-repeat在角度不更新視圖

底層項目可以通過ng-click事件刪除它自己。此事件將陣列中的項目拼接起來。

在下面的plunkr中,如果刪除了第二個項目(item2),那麼該數組留下item1和item3,但視圖會看到item1和item2。子控制器永遠不會再被調用並使用高速緩存的控制器。

如何手動強制刷新這些控制器?不應該爲我做這個嗎?

http://plnkr.co/edit/jDidC4anikwjZSLMWct6?p=preview

回答

3

您目前是按$index跟蹤,這將不更新你想要的方式:

這裏是一個updated plunker

我所做的唯一變化是拿出在pitem in items track by $indextrack by $indextoplevel.html):

<div ng-repeat="pitem in items" ng-include="" src="'mid-level.html'" ng-controller="midlevel">test</div> 

編輯:

track by $index將決定什麼時候使用$index值作爲平等檢查更新於ng-repeat。因此,這是發生了什麼事:

  1. 設置完畢後我們有[i: 0, name: 'item1', i: 1, name: 'item2', i: 2, name: 'item3']
  2. item2拼接出
  3. track by $index看到出現了一個變化,並檢查是否$index與價值01陣列中仍存在
  4. 他們這樣做,所以沒有進行更新
  5. 然而$index與價值3不存在
  6. 所以,更新和刪除
+1

爲什麼使用syntacs'ng-include =「」src =「'mid-level.html'」'當你可以直接使用'ng-include''mid-level.html'「' – bbahov

+0

非常感謝!有沒有任何文件說明爲什麼按照我預期的方式運行? – MatB

+0

@MatB我已經添加了如何使用'$ index'打破預期行爲的細節。 –

0

有問題,你是在做item.name檢查,但你存儲pitems.name更新列表,所以如果你更新中級你的代碼。 HTML代碼

{{item.name}} <span ng-click="delete(items, $index)">x</span> 

{{pitem.name}} <span ng-click="delete(items, $index)">x</span> 

這是工作的罰款。