什么是u-grid中ng-grid的"beforeSelectionChange"的等价物?

spo*_*rts 8 angularjs ng-grid angular-ui-grid

ng-grid,我曾经以beforeSelectionChange下列方式使用:

当用户选择行时,执行ajax调用.虽然我设置了ajax调用$scope.doingAjaxCall = true,并且为了阻止用户更改选择,我在网格定义中有这个:

beforeSelectionChange: function () {
    return !($scope.doingAjaxCall);
},
Run Code Online (Sandbox Code Playgroud)

如果ajax调用正在发生,它会锁定/冻结选择.

现在,在ui-grid(又名ng-grid 3)中,我不知道相当于什么afterSelectionChange.

在文档的这一部分:
http://ui-grid.info/docs/#/api/ui.grid.selection.api : PublicApi
我看到两个事件:

  • rowSelectionChanges
  • rowSelectionChangedBatch.

这些似乎相当于旧的 afterSelectionChange

在文档的这一部分:
http://ui-grid.info/docs/#/api/ui.grid.selection.service : uiGridSelectionService
我看到这两个似乎与需求相关的方法:

  • raiseSelectionEvent(grid, changedRows, event)
  • decideRaiseSelectionEvent(grid, row, changedRows, event)

但我不明白如何使用它们

重要提示:
我正在使用multiSelect: false(即:只能选择一行)

leb*_*olo 0

这有点像黑客,但它会完成工作,直到您找到更好的解决方案。这是一个正在工作的笨蛋

我假设您用于rowSelectionChanged执行 AJAX 调用和切换doingAjaxCall

gridApi.selection.on.rowSelectionChanged($scope, function(row) {
  $log.log('Row ' + row.entity.id + ' selected: ' + row.isSelected);

  $log.log('  Simulating ajax call...');
  $scope.doingAjaxCall = true;
  $timeout(function() {
    $log.log('  ...done with ajax call');
    $scope.doingAjaxCall = false;
  }, 2000);
});
Run Code Online (Sandbox Code Playgroud)

然后,修改 ui-grid 用于选择按钮的模板。

$templateCache.put('ui-grid/selectionRowHeaderButtons',
  '<div ' +
  '  class="ui-grid-selection-row-header-buttons ui-grid-icon-ok" ' +
  '  ng-class="{\'ui-grid-row-selected\': row.isSelected}" ' +
  '  ng-click="grid.appScope.clickConditions() && selectButtonClick(row, $event)"> ' + // Modified template here
  '  &nbsp; ' +
  '</div>'
);
Run Code Online (Sandbox Code Playgroud)

这样,在调用实际点击逻辑之前$scope.clickConditions()进行评估。如果它是假的,则永远不会调用处理内部选择逻辑的 。selectButtonClick

$scope.clickConditions = function() {
  // Check for any other conditions you need
  return !$scope.doingAjaxCall;
};
Run Code Online (Sandbox Code Playgroud)

正如我提到的,这非常 hacky!有更好的方法来覆盖模板(例如ui-grid/selectionRowHeaderButtons),当覆盖模板时,您必须在更新时检查逻辑,您应该让用户知道在执行 AJAX 调用时视觉上发生了一些事情,等等。

更好的解决方案是分叉存储库并添加您自己的beforeSelectionChange逻辑(可能从这里开始)。但似乎您在其他地方没有得到太多帮助,所以希望这至少能让您开始!