我创建了html表并使用ng-repeat来显示表中的项目,但我不能在表中选择多行.如何通过使用控制键来实现这一点谢谢!
# Description Ali Extension Ext/th> Comp {{$index}} {{docType.Desc}} {{docType.LI}} {{docType.Ext}} {{docType.EXT}} {{docType.Comp}}
1> Aloïs de La ..:我希望这对你来说还不算太晚,我有你回答.
您可以使用$ event.ctrlKey参数来检查用户是否按下了控件.
更好的是,有一个$ event.shiftKey参数来检查是否按下了shift.
你可以这样使用它(我让一个简单的控制器中的所有逻辑,以便它更容易理解,但我建议你把它放在服务中).此外,我选择仅存储行索引,但它与完整行的工作方式相同.
HTML
AngularJS
var selectedRowsIndexes = []; $scope.rows = [{name: 'Happy Butterfly'}, {name: 'Wonderful Bee'}]; $scope.selectRow = function(event, rowIndex) { if(event.ctrlKey) { changeSelectionStatus(rowIndex); } else if(event.shiftKey) { selectWithShift(rowIndex); } else { selectedRowsIndexes = [rowIndex]; } console.log(selectedRowsIndexes); console.log(getSelectedRows()); console.log(getFirstSelectedRow()); }; function selectWithShift(rowIndex) { var lastSelectedRowIndexInSelectedRowsList = selectedRowsIndexes.length - 1; var lastSelectedRowIndex = selectedRowsIndexes[lastSelectedRowIndexInSelectedRowsList]; var selectFromIndex = Math.min(rowIndex, lastSelectedRowIndex); var selectToIndex = Math.max(rowIndex, lastSelectedRowIndex); selectRows(selectFromIndex, selectToIndex); } function getSelectedRows() { var selectedRows = []; angular.forEach(selectedRowsIndexes, function(rowIndex) { selectedRows.push($scope.rows[rowIndex]); }); return selectedRows; } function getFirstSelectedRow() { var firstSelectedRowIndex = selectedRowsIndexes[0]; return $scope.rows[firstSelectedRowIndex]; } function selectRows(selectFromIndex, selectToIndex) { for(var rowToSelect = selectFromIndex; rowToSelect <= selectToIndex; rowToSelect++) { select(rowToSelect); } } function changeSelectionStatus(rowIndex) { if($scope.isRowSelected(rowIndex)) { unselect(rowIndex); } else { select(rowIndex); } } function select(rowIndex) { if(!$scope.isRowSelected(rowIndex)) { selectedRowsIndexes.push(rowIndex) } } function unselect(rowIndex) { var rowIndexInSelectedRowsList = selectedRowsIndexes.indexOf(rowIndex); var unselectOnlyOneRow = 1; selectedRowsIndexes.splice(rowIndexInSelectedRowsList, unselectOnlyOneRow); } function resetSelection() { selectedRowsIndexes = []; } $scope.isRowSelected = function(rowIndex) { return selectedRowsIndexes.indexOf(rowIndex) > -1; }; });最后,如果你想使用强大的表,我建议你使用ng-table.
如果您使用ng-table,请务必添加
$scope.$on('ngTableAfterReloadData', function() { resetSelection(); });并用$ scope.tableParams.data [rowIndex]替换$ scope.rows [rowIndex]
2> Maher..:在此示例中,我尝试检测选择了哪一行,因此我将
selected
param 添加到已选择的每个对象,然后我们可以$filter
用来检测选定的行.
var app = angular.module("app", []); app.controller("ctrl", function($scope, $filter) { $scope.users = [{ name: "x" }, { name: "y" }, { name: "z" }]; $scope.selectedRows = []; $scope.select = function(item) { item.selected ? item.selected = false : item.selected = true; } $scope.getAllSelectedRows = function() { var selectedRows = $filter("filter")($scope.users, { selected: true }, true); $scope.selectedRows = selectedRows; } });
body { padding-top: 50px; } tr td { cursor: pointer } tr.selected td { background: #ccc!important; }
{{selectedRows | json}}
推荐阅读
如何解决《Cassandra-将PreparedStatement与ListenableFuture一起使用》经验,为你挑选了1个好方法。 ... [详细] 如何解决《什么会阻止队列中的作业处理?[PHP/Laravel5]》经验,为你挑选了0个好方法。 ... [详细] 如何解决《测试两个二叉树是否相等》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何从django中的模块中的给定字段获取所有引用为ForeignKey的对象》经验,为你挑选了2个好方法。 ... [详细] 如何解决《Angular2替换$httpProvider.defaults.withCredentials》经验,为你挑选了0个好方法。 ... [详细] 如何解决《无法在ApacheSparkSQL1.5.2的SQLContext中运行查询,获取java.lang.NoSuchMethodError》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何从函数onResponseofRetrofit返回值?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《通过Monocle修改地图》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Pandaspython-匹配值》经验,为你挑选了1个好方法。 ... [详细] 如何解决《合并git中的XML文件更改》经验,为你挑选了0个好方法。 ... [详细] 如何解决《仅返回基于子文档_id的子文档,子文档_id是mongodb文档的数组字段的项目》经验,为你挑选了1个好方法。 ... [详细] 如何解决《CollapsingToolbarLayout+TabLayout,奇怪的工具栏标题边距》经验,为你挑选了2个好方法。 ... [详细] 如何解决《查找列表的"居中平均值"》经验,为你挑选了1个好方法。 ... [详细] 如何解决《是否有一个更简单的类型系统与CoC的实用工具?》经验,为你挑选了0个好方法。 ... [详细] 如何解决《Webpack-没有输出文件,没有报告错误》经验,为你挑选了0个好方法。 ... [详细] 如何解决《如何找到数据框中列对的差异》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Linq:按不规则顺序排序》经验,为你挑选了1个好方法。 ... [详细] 如何解决《按大前N%分类大熊猫数据》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Ubuntu上的“avr-gcc:找不到命令”》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Chrome会在RTL语言网站上显示空白页面,直到调整窗口大小》经验,为你挑选了1个好方法。 ... [详细]吐了个 "CAO" !Tags | 热门标签RankList | 热门文章
- 1WordPress - 上传时模糊图像
- 2关于django INSTALLED_APPS命名约定有点困惑
- 3MongoDB聚合 - 将项目字段值作为字段
- 4结合像Promise.all这样的等待
- 5Linux - PHP 7.0和MSSQL(Microsoft SQL)
- 6为什么'gradle install'用'未指定'替换我的版本?
- 7onCleanUp()vs onComplete()vs afterLaunch()
- 8为什么这样做?[C++; 无效指针]
- 9C返回struct指针
- 10Visual Basic编辑器Excel 2016中的边距
- 11Intellij IDEA 15中的持久性工具窗口在哪里?
- 12在R包rms中纳入随机拦截以进行混合效应逻辑回归
- 13龙卷风curl_httpclient:类型错误:此选项不支持unsetopt()吗?
- 14如何在QTabWidget中隐藏选项卡并在按下按钮时显示它
- 15在pandas数据帧中使用最大似然估计的自回归(AR)模型:correlate()得到了一个意外的关键字参数'旧行为'
- 16OpenCV:是否可以从角落检测矩形?
- 17RegExp匹配键值对列表中的值
- 18如果只需要结果的低部分,那么可以使用哪个2的补码整数运算而不将输入中的高位置零?
- 19在perl中通过HASH迭代
- 20什么是linux中的链接irq,何时需要使用?
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有