【发布时间】:2015-09-20 09:22:00
【问题描述】:
我正在使用 Angular 和 dirPagination 指令构建一个 CRUD 数据管理项目,并且需要有一个“全选”复选框来选择所有可见/不使用/使用 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}} 值会更新并显示在复选框旁边。
然后我添加了这个 /outside/ 的 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;
似乎在 checkAll 函数的范围内设置了该项目的“isSelected”属性,但行显示没有改变。
显然我有一些错误,可能误解了范围问题,但此时我被难住了。
非常感谢任何帮助:-)
【问题讨论】:
-
我在之前的帖子enter link description here中遇到过这个问题@
标签: angularjs checkbox selectall dirpagination