다음 템플릿에서 엔티티 컬렉션을 렌더링 하는 AngularJS 지시문 이 있습니다.
<table class="table">
<thead>
<tr>
<th><input type="checkbox" ng-click="selectAll()"></th>
<th>Title</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="e in entities">
<td><input type="checkbox" name="selected" ng-click="updateSelection($event, e.id)"></td>
<td>{{e.title}}</td>
</tr>
</tbody>
</table>
보시다시피 <table>
각 행을 자체 확인란을 사용하여 개별적으로 선택하거나에있는 마스터 확인란을 사용하여 한 번에 모든 행을 선택할 수 있습니다 <thead>
. 꽤 고전적인 UI.
다음을 수행하는 가장 좋은 방법은 무엇입니까?
- 단일 행을 선택
<tr>
합니까 (예 : 확인란을 선택한 경우 선택한 엔티티의 ID를 내부 배열에 추가 하고 엔티티를 포함 하는에 CSS 클래스를 추가하여 선택한 상태를 반영)? - 한 번에 모든 행을 선택 하시겠습니까? (예 :의 모든 행에 대해 이전에 설명한 작업 수행
<table>
)
내 현재 구현은 내 지시문에 사용자 지정 컨트롤러를 추가하는 것입니다.
controller: function($scope) {
// Array of currently selected IDs.
var selected = $scope.selected = [];
// Update the selection when a checkbox is clicked.
$scope.updateSelection = function($event, id) {
var checkbox = $event.target;
var action = (checkbox.checked ? 'add' : 'remove');
if (action == 'add' & selected.indexOf(id) == -1) selected.push(id);
if (action == 'remove' && selected.indexOf(id) != -1) selected.splice(selected.indexOf(id), 1);
// Highlight selected row. HOW??
// $(checkbox).parents('tr').addClass('selected_row', checkbox.checked);
};
// Check (or uncheck) all checkboxes.
$scope.selectAll = function() {
// Iterate on all checkboxes and call updateSelection() on them??
};
}
더 구체적으로 궁금합니다.
- 위의 코드가 컨트롤러에 속합니까 아니면
link
함수에 들어가야 합니까? - jQuery가 반드시 존재하지는 않는다는 점을 감안할 때 (AngularJS는이를 필요로하지 않습니다) DOM 순회를 수행하는 가장 좋은 방법은 무엇입니까? jQuery가 없으면
<tr>
주어진 확인란 의 부모 를 선택하거나 템플릿의 모든 확인란을 선택하는 데 어려움을 겪습니다. - 전달
$event
하는updateSelection()
것은 그다지 우아하지 않은 것 같습니다. 방금 클릭 한 요소의 상태 (선택 / 선택 해제)를 검색하는 더 좋은 방법이 없습니까?
감사합니다.
ngChecked
지시 에 대해 배웠습니다 . (내 유일한 후회는 우리가 자세한 조금 덜이 코드를 만들 수 없다는 것입니다.)