2013-10-16 36 views
6

我想配置ng-grid獲得以下多重選擇行爲:ngGrid MULTISELECT取消當前的選擇

  1. 選擇單行取消以前的選擇

  2. 選擇按Ctrl增加到當前選擇(例如 在Windows資源管理器中選擇文件)

詳情:

  • ,如果我選擇了某一行,整行被選中(enableRowSelection)
  • 如果我選擇一列保持Ctrl鍵新行除了當前選擇的選擇行
  • 如果我選擇保持的範圍內選擇
  • 如果我選擇不按任何鍵的行我想的行被選擇,而另一個S作爲預期除了最後一步未選擇

ng-grid作品(點擊行時不選擇其他行)

+0

根據其頁面上的所有演示(http://angular-ui.github.io/ng-grid/)單擊選定的行取消選擇它。你在控制檯中看到任何javascript錯誤,因爲它應該工作 – Ronnie

+0

@Ronnie謝謝你的評論:再次選擇一行確實取消選擇它,但我需要的是,點擊未選中的行取消選擇所有其他(和選擇點擊之一) – mabi

+1

因此,當使用Ctrl + Click時,您想要將$ scope.gridOptions {multiSelect:false}切換到$ scope.gridOptions {multiSelect:true}?聽起來像這個以前的問題相同的問題:http://stackoverflow.com/questions/19090613其中@Dar制定了一個骯髒的解決方案。 (只用他自己的話:) – AardVark71

回答

1

您可以添加到您的網格控制器:

$scope.multiSelect = false; 
// control/shift/meta keydown enables multiselect 
$('.your-grid').keydown(function (e) { 
    if ((e.keyCode === 16 || e.keyCode === 17 || e.metaKey || e.keyCode === 224 || e.keyCode === 91 || e.keyCode === 93) && !$scope.multiSelect) { 
     $scope.multiSelect = true; 
    } 
}); 
// keyup disables it 
$('.your-grid').keyup(function (e) { 
    if (e.keyCode === 16 || e.keyCode === 17 || e.metaKey || e.keyCode === 224 || e.keyCode === 91 || e.keyCode === 93) { 
     $scope.multiSelect = false; 
    } 
}); 

$scope.gridOptions.beforeSelectionChange = function() { 
    // if the shift/ctrl/meta keys aren't pressed, then each selection 
    // will clear all the previous ones 
    if (!$scope.multiSelect) { 
     for (var i = 0; i < $scope.gridOptions.data.length; ++i) { 
      $scope.gridOptions.selectRow(i, false); 
     } 
    } 
    return true; 
}; 

您的看法看起來像這樣:

<div class="your-grid" ng-grid="gridOptions"> 

所有不同的keyCode值的原因是,Mac的命令鍵的鍵碼是依賴於瀏覽器的。你可以使用e.metaKey,但這不適用於所有事情(Mac的Chrome我不相信)。因此,爲了安全起見,您可以檢查SO帖子中描述的所有keyCode值:How does one capture a Mac's command key via JavaScript?

此解決方案的靈感來自:AngularJS Change multiple row selection ng-grid attribute on key down和另一個SO帖子,目前我找不到。

相關問題