2013-10-14 75 views
4

考慮下表:

<tbody data-ng-repeat="job in jobs"> 
    <tr> 
     <td>{{job.fileName}}</td> 
     <td> 
      <button class="btn" ng-click="deleteJob($index);"><i class="icon-delete"></i>&nbsp; delete</button> 
     </td> 
    </tr> 
</tbody> 

如果我刪除作業,該行ID傳遞給函數,它工作得很好。

scope.deleteJob = function (id) { 
       scope.jobs.splice(id, 1); 
      } 

但是如果我改變deleteJob($index)deleteJob({{$index}})然後,該指數仍傳遞給函數,但是如果我刪除第1行,第2行的指數保持2並沒有更新。

怎麼回事?這兩種方法有什麼區別?

+0

你能設置一個暴徒?感謝,這是有道理的 – Stewie

回答

5

這是因爲當您使用$index它是一個變量,但是當您使用{{$index}}值代替變量。

如果檢查DOM,你會看到,在第一case($index)你仍然可以看到在DOM $index,但是當你用{{$index}}你會看到0,1,2 ......在DOM。

如果您使用{{index}},當數組發生更改時,您的DOM仍然會有deleteJob(0),deleteJob(2) ...等等 - 缺少已刪除的索引。

如果您使用$index您的DOM將具有$index,這是一個表示實際當前索引的變量。

+0

。 – Sam

1

我認爲{{$index}}是錯誤的,並且重複元素的迭代器偏移量的有效使用必須是$index

$index迭代器和刪除後的項目應該分別更新。

當我們寫{{$index}}意味着 - 顯示存儲在迭代器中的當前值。

像其他語言的Java爲例,如果我們在遍歷目錄運行(如ng-repeat),我們只能用迭代器刪除項目,以防止指數發出

演示Fiddle