angularjs – 在ui-grid中,ng-grid的“beforeSelectionChange”相当于什么?

前端之家收集整理的这篇文章主要介绍了angularjs – 在ui-grid中,ng-grid的“beforeSelectionChange”相当于什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在ng-grid中,我曾经以下列方式使用beforeSelectionChange:

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

  1. beforeSelectionChange: function () {
  2. return !($scope.doingAjaxCall);
  3. },

如果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)
> decisionRaiseSelectionEvent(grid,row,event)

但我不明白如何使用它们

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

这有点像黑客,但它会完成工作,直到找到更好的解决方案.这是一个工作 plunker.

我假设您使用rowSelectionChanged来执行AJAX调用并切换doingAjaxCall.

  1. gridApi.selection.on.rowSelectionChanged($scope,function(row) {
  2. $log.log('Row ' + row.entity.id + ' selected: ' + row.isSelected);
  3.  
  4. $log.log(' Simulating ajax call...');
  5. $scope.doingAjaxCall = true;
  6. $timeout(function() {
  7. $log.log(' ...done with ajax call');
  8. $scope.doingAjaxCall = false;
  9. },2000);
  10. });

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

  1. $templateCache.put('ui-grid/selectionRowHeaderButtons','<div ' +
  2. ' class="ui-grid-selection-row-header-buttons ui-grid-icon-ok" ' +
  3. ' ng-class="{\'ui-grid-row-selected\': row.isSelected}" ' +
  4. ' ng-click="grid.appScope.clickConditions() && selectButtonClick(row,$event)"> ' + // Modified template here
  5. ' &nbsp; ' +
  6. '</div>'
  7. );

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

  1. $scope.clickConditions = function() {
  2. // Check for any other conditions you need
  3. return !$scope.doingAjaxCall;
  4. };

正如我所提到的,这非常hacky!有更好的方法来覆盖模板(例如ui-grid / selectionRowHeaderButtons),当覆盖你需要的模板check the logic when updating时,你可能应该让用户知道在执行AJAX调用时可视化的事情等等.

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

猜你在找的Angularjs相关文章