2014-02-10 50 views
2

我正在使用指令來分隔實體(例如,某人)的邏輯。如何在AngularJS中銷燬指令?

所以我有一個存儲的人喜歡一個數組人服務:

this.people = ["Person 1", "Person 2", "etc"]; 

控制器然後注入該服務,並將數據發送到包含我的指令的模板。所以,我的模板看起來是這樣的:現在

<div ng-repeat="person in people"> 
    <person name="person"></person> 
</div> 

,在我的指導我有一個刪除功能(通過點擊該指令的模板按鈕調用,它看起來是這樣的(人民服務還注入指令):

delete People.people[id]; 

問題是,我的指令模板的其餘部分保持完好無損我想在刪除時完全刪除指令,這怎麼可能?我嘗試使用ng-hide隱藏它並設置'deleted '指令範圍內的屬性在刪除時爲真,但空(無數據)指令模板仍然存在。 stroy(),element.remove()等,但沒有任何工作,沒有什麼似乎真的很清楚在文檔中...

如何可以從本身完全摧毀/刪除指令(即,在調用刪除功能時)?

小提琴:http://jsfiddle.net/VSph2/107/

點擊刪除和數據走了,但該指令(和模板)仍顯示「姓名:」。我怎樣才能刪除指令完全刪除?

+0

'NG-repeat'控制什麼渲染它裏面,刪除的內容,它遍歷並調用'範圍的數組項$適用()'應'NG-重複'刪除dom元素。你可以顯示你的指令或使這個簡化的JSFiddle? – Philipp

+0

它說已經有一個$ apply()正在進行中...給我5分鐘,我會快速提琴。 – Anonymous

+1

@ user1066946 - 小提琴的例子在這裏:http://jsfiddle.net/VSph2/107/(點擊刪除和指令模板仍然是..我想完全刪除指令) – Anonymous

回答

2

您正在刪除對象,但數組中仍有空元素,它只是空引用而不是指向現有對象。

使用

this.peopleIds.splice(this.peopleIds.indexOf(personId), 1); 

從數組中刪除它,該元素將不會被用於循環再渲染英寸

參考:How do I remove a particular element from an array in JavaScript?

+0

我剛剛發現自己字面上是因爲你發佈它(將{{people}}和{{peopleIds}}添加到模板,並看到該數組仍然包含兩個空值。謝謝!浪費了很多時間。 – Anonymous