Я создаю проект управления данными CRUD, используя Angular и директиву dirPagination, и мне нужен флажок «выбрать все», который выбирает все строки, которые видны / без / с использованием jQuery.
Я начал с этого - обратите внимание - я поднимаюсь по кривой обучения Angular и знаю, что некоторые / все это может быть не «подходом Angular», но я также не хочу начинать возиться (без слов) с кишками dirPagination , следовательно, директива dirPagination:
<tr dir-paginate-start="item in items|filter:filterFunction()|orderBy:sortPredicate:reverse| itemsPerPage: rowsPerPage">
и отдельная строка-флажок
<input type="checkbox" class="rowSelector" ng-model="item.isSelected" ng-change="rowSelect($index, $event)"/> status: {{item.isSelected}}
и соответствующие элементы модели:
$scope.items = [] //subsequently filled
$scope.rowsPerPage = 5;
$scope.rowSelect = function (ix, $event) {
var checked = (typeof $event == 'undefined') ? false : true;
if (!checked) { $scope.masterCheck = false; }
var rpp = $scope.rowsPerPage;
var p = $scope.__default__currentPage; //dirPagination's current page
var start = ((Math.max(0, p - 1) * rpp));
$scope.items[start + ix].isSelected = checked;
};
это работает, как ожидалось. Установите / снимите флажок со строки, и значение {{item.isSelected}} обновится в модели и отобразится рядом с флажком.
Затем я добавил это / за / из блока повторения dirPagination:
<input type="checkbox" id="masterCheckbox" ng-model="masterCheck" ng-click="checkAll()" />
и связанная функция в модели:
$scope.masterCheck = false;
$scope.checkAll = function () {
var rpp = $scope.rowsPerPage;
var p = $scope.__default__currentPage; //dirPagination's current page
var start = ((Math.max(0, p - 1) * rpp));
var checked = $scope.masterCheck == true;
var rows = document.getElementsByClassName("rowSelector");
for (var ix = 0; ix < rows.length; ix++) {
rows[ix].checked = checked;
$scope.items[start + ix].isSelected = checked;
}
}
однако в функции checkAll () проверка / снятие отметки с отдельных строк не отражается на отображении {{item.isSelected}} каждой строки.
Явная установка отдельного элемента с помощью
$scope.items[start + ix].isSelected = checked;
Кажется, что свойство isSelected этого элемента устанавливается в рамках функции checkAll, но отображение строки не изменяется.
Ясно, что у меня что-то не так, возможно, я неправильно понимаю проблему Scope, но на данный момент я в тупике.
Любая помощь очень ценится :-)