Angularjs 如何在角度ui网格中禁用编辑排序

Angularjs 如何在角度ui网格中禁用编辑排序,angularjs,angular-ui-grid,Angularjs,Angular Ui Grid,我使用angular ui grid显示表格数据 可以编辑单元数据。 我注意到,如果对一列进行排序,然后编辑单元格,排序就会进入并移动行。我想禁用单元格编辑排序,有没有办法做到这一点。 我在下面提供了plunker链接。在plunk中,首先按升序对第一列进行排序,然后编辑a2的值,比如说x,然后在单元格外单击,您将看到eidted行现在移动到最后一行。我想防止在编辑时排序,如果我们在编辑时删除所有现有的活动列排序,基本上是可以的 <div id="grid1" ui-grid="gridOp

我使用angular ui grid显示表格数据

可以编辑单元数据。 我注意到,如果对一列进行排序,然后编辑单元格,排序就会进入并移动行。我想禁用单元格编辑排序,有没有办法做到这一点。 我在下面提供了plunker链接。在plunk中,首先按升序对第一列进行排序,然后编辑a2的值,比如说x,然后在单元格外单击,您将看到eidted行现在移动到最后一行。我想防止在编辑时排序,如果我们在编辑时删除所有现有的活动列排序,基本上是可以的

<div id="grid1" ui-grid="gridOptions" class="grid" ui-grid-edit > </div>


将enableSorting设置为false

enableSorting: false

beginEditCell
回调中,您可以知道用户何时正在编辑。 您可以利用保存和恢复ui网格状态的优势。
afterCellEdit
cancelCellEdit
回调中,您可以知道用户何时完成编辑,然后您可以恢复。

我找到了一种方法,通过进行简单的破解来解决此问题

当触发notifyDataChange事件并调用processRowsCallback函数时,由于回调函数(registerDataChangeCallback)而发生排序,processRowsCallback定义如下

Grid.prototype.processRowsCallback = function processRowsCallback( grid ){
    grid.queueGridRefresh();
  };
这里Grid是一个工厂,ProcessRowScalBack函数在工厂下定义,它调用Grid.queueGridRefresh()并调用排序,排序发生在网格中的数据更改之后

因此,我想通过将网格工厂注入我创建的工厂(extendedGridFactory)来覆盖原型函数ProcessRowscalback,并复制相同的函数,但如果网格未处于editmode并调用Grid.queueGridRefresh(),则检查条件;像下面这样

app.factory('extendedGridFactory', ['Grid', '$rootScope', function (Grid, rootScope) {
    var extendedGrid = Object.create(Grid);
    extendedGrid.prototype.processRowsCallback = function processRowsCallback(grid) {
        if (!rootScope.isInEditMode) {
            grid.queueGridRefresh();
        }
    };
    return extendedGrid;
}]);
太好了,到目前为止效果很好


如果您发现此代码有任何问题,请告诉我。:)

请马上查收。。谢谢您希望编辑的行发生什么情况?初始(未排序)顺序为a1、a3、a2-是否要将网格还原为未排序的顺序,以便新的顺序为:a1、a3、x(x替换a2)?我希望排序操作可用,我只希望在编辑时不发生自动排序。仅当用户单击标题或调用排序操作时才应进行排序除了放置链接外,还应解释链接包含的内容,并提供链接内容的摘录,以回答(或帮助)问题。
app.factory('extendedGridFactory', ['Grid', '$rootScope', function (Grid, rootScope) {
    var extendedGrid = Object.create(Grid);
    extendedGrid.prototype.processRowsCallback = function processRowsCallback(grid) {
        if (!rootScope.isInEditMode) {
            grid.queueGridRefresh();
        }
    };
    return extendedGrid;
}]);