我的视图中定义了以下网格
<div class="gridStyle hide" ng-grid="resultsOptions" id="resultsGrid"></div>
Run Code Online (Sandbox Code Playgroud)
并且我只想在按下ctrl键时允许multiSelect.所以我在Controller中将multiSelect属性定义为false.
$scope.resultsOptions = {
data: 'searchData',
selectedItems: $scope.mySelections,
multiSelect: false,
enableHighlighting: true,
enableRowSelection: true
};
Run Code Online (Sandbox Code Playgroud)
在同一个控制器中,我有以下代码将multiSelect设置为true.
$("#resultsGrid").keydown(function (e) {
if (e.ctrlKey) {
$scope.resultsOptions.multiSelect = true;
$scope.$apply();
}
});
Run Code Online (Sandbox Code Playgroud)
当我按下ctrl后启动应用程序multiSelect值更改.但我仍然无法做出多重选择.
我试图将变量用于multiSelect,但它不会改变一个东西.
以下示例也不会更改multiSelect属性.但它改变了网格标题. http://plnkr.co/edit/RwYSG4?p=preview
有没有简单的解决方案?或者我的代码中有什么错过?
小智 6
批准的"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;
}
Run Code Online (Sandbox Code Playgroud)
这样做只是检查我们是否正在进行多选操作(按住Ctrl键,Shift键或使用多选复选框),如果是,则进行多选.如果用户只是单击行中的任何其他位置,并且多重选择处于活动状态,我们将删除所有当前选择,以便之后只选择一个目标行.