我在视图中定义了以下网格
<div class="gridStyle hide" ng-grid="resultsOptions" id="resultsGrid"></div>
我想仅在按下 ctrl 键时才允许多重选择。所以我在控制器中将 multiSelect 属性定义为 false。
$scope.resultsOptions = {
data: 'searchData',
selectedItems: $scope.mySelections,
multiSelect: false,
enableHighlighting: true,
enableRowSelection: true
};
在同一个控制器中,我有以下代码将 multiSelect 设置为 true。
$("#resultsGrid").keydown(function (e) {
if (e.ctrlKey) {
$scope.resultsOptions.multiSelect = true;
$scope.$apply();
}
});
当我启动应用程序时,按下 ctrl 后 multiSelect 值会发生变化。但我仍然无法做出多项选择。
我尝试使用变量进行多选,但它不会改变任何事情。
以下示例也不会更改 multiSelect 属性。但它改变了网格标题。http://plnkr.co/edit/RwYSG4?p=preview http://plnkr.co/edit/RwYSG4?p=preview
有什么简单的解决办法吗?或者我的代码中遗漏了什么?
批准的“hacky”答案对我们来说不够干净,因此我们根据事件参数构建了一个稍微更健壮的版本beforeSelectionChange
而不是进行令人讨厌的按键绑定。
这也适用于您添加此事件回调的任何网格,因为它不需要引用任何特定的自定义 CSS 类或 ID,而只需使用可靠的 ng-grid 类。
beforeSelectionChange: function(rowItem, event){
if(!event.ctrlKey && !event.shiftKey && $scope.multiSelect &&
!$(event.srcElement).is(".ngSelectionCheckbox"))
{
angular.forEach($scope.myData, function(data, index){
$scope.gridOptions.selectRow(index, false);
});
}
return true;
}
它的作用只是检查我们是否正在执行多选操作(按住 ctrl 键、shift 键或使用多选复选框),如果是,则让多选发生。
如果用户只是单击一行上的任何其他位置,并且多选处于活动状态,我们将删除所有当前选择,以便随后仅选择一个目标行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)