2016-02-22 53 views
0

在這個簡單的問題上花了很多時間,並做了大量的研究後,我想知道是否有人可以給我一些幫助。AngularJs:刪除項目後刪除複選框

我有其表的內部產生的,像這樣的數據:

<tbody> 
    <tr class="odd gradeX" ng-repeat="user in ctrl.datas | orderBy:ctrl.sortType:ctrl.sortTypeReverse"> 
    <td> 
     <input type="checkbox" class="checkboxes" value="{{user.id}}" ng-click="ctrl.addItem(user)"/> 
    </td> 
    <td> 
     {{user.given_name}} 
    </td> 

    <td> 
     {{user.family_name}} 
    </td> 
    <td> 
     <a href="mailto:{{user.emai}}"> {{user.email}}</a> 
    </td> 
    <td class="center" ng-bind-html="ctrl.convertToDate(user.created_at) | date: 'dd-MMMM-yyyy hh:mm'"></td> 
    <td> 
     <span class="btn blue-hoki"> Details </span> 
    </td> 
    </tr> 
</tbody> 

上面是一個容器,其中我得到通過複選框選擇的項目中,添加在數組中,並給該用戶的能力刪除所選項目:

<tr ng-repeat="user in ctrl.checkedObject track by $index" ng-show="user.id"> 
    <td>{{user.family_name}}</td> 
    <td>{{user.given_name}}</td> 
    <td> 
     <button class="btn blue" ng-click="ctrl.removeItem($index)">Unselect</button> 
    </td> 
</tr> 

在我的控制器,這裏是用來做這樣的兩個功能:

this.checkedObject = []; 

//Add selected user 

this.addItem = function (user) { 
    self.checkedObject.push(user); 
}; 
this.removeItem = function(obj){ 
    delete self.checkedObject[obj]; 
}; 

如果用戶更改了他的選擇,我想實現的是取消選中相應的複選框。 事情是,我不知道如何目標相應的複選框。有人有線索嗎? 在此先感謝

回答

1

I set up a simple plunker展現一種方法,這將是一個selected屬性分配給當他/她的複選框被選中每一個用戶,並設置對應於user.selected複選框的ng-checked屬性(所以,將取消選中假時)。

使用這種方法,您不需要從checkedUsers的數組中推送和刪除,您可以通過選擇或不選擇來篩選所有用戶。

function getSelected() { 
    ctrl.checkedObject = _.filter(ctrl.datas, {selected: true}); 
} 

ctrl.selectUser = function (user) { 
    user.selected = true; 
    getSelected(); 
}; 
ctrl.removeUser = function(user){ 
    user.selected = false; 
    getSelected(); 
}; 
+0

嗨,非常感謝。它會在提供的上下文中工作,但我正在檢索的數據目前在JSON文件中,並且將通過API遠程獲取。你認爲值得修改數據以添加* select *鍵嗎? –

+0

您不必更新API端的任何內容,它只是在控制器中動態添加的客戶端屬性。 –

+0

好吧,我已經做到了,並將其添加到我的對象,非常感謝,我會解決,並會讓你知道 –

1

嘗試NG-檢查,如:

<input type="checkbox" ng-checked="user !== null" class="checkboxes" value="{{user.id}}" ng-click="ctrl.addItem(user)"/> 

和項目(用戶)設置爲上按一下按鈕(裏面的removeItem())或其它變量空。

+0

非常感謝你回答,遺憾的是它做什麼我的應用程序正在檢查所有複選框... –

+0

不明白你的意思,但如果異常,檢查爲真,則複選框中的表達式被檢查,否則未被選中。因此,如果您刪除該項目(用戶),則可以將用戶設置爲null,並且ng-checked的表達式將自動爲false - >該複選框未被選中。 如果這是正確的答案,只需註冊並標記爲解決方案。 – CodeNashor

+0

我瞭解邏輯,但實際上並沒有像預期的那樣工作(我沒有發佈我的所有代碼),感謝您的幫助 –