如何以编程方式更新ui-grid中的排序指标?

MVC*_*ble 3 angularjs angular-ui-grid

我正在使用ui-grid-v3.0.0-rc.22-2015-06-15。

它配置为使用外部排序,效果很好。

现在,我需要使用选择框从外部更改已排序的列。选择框的每次更改都会触发外部排序,并且网格中的数据会正确更新。它还更新了gridOptions.columnDefs:将除正确列之外的所有列的排序对象设置为undefined,并更新已排序的列。

但是有一个问题,当前排序的列指示符(在列标题中)没有得到应有的更新。

我尝试使用带有“ options”或“ column”作为参数值的gridApi.core.notifyDataChange(),但是它也不起作用。如何以编程方式更新ui-grid中的排序指标?

这是由选择框触发的部分代码:

    function updateSortColumn() {
        if ($rootScope.QuickSearch.sortBy !== undefined) {
            $scope.gridOptions.columnDefs.forEach(function (col) {
                if (col.field === $rootScope.QuickSearch.sortBy) {
                    col.sort = {
                        direction:  $rootScope.QuickSearch.sortOrder,
                        priority: 0
                    };
                }
                else
                {
                    col.sort = undefined;
                }
            });
        }
        if($scope.gridApi !== undefined)
        {
            $scope.gridApi.core.notifyDataChange( uiGridConstants.dataChange.OPTIONS );
            $scope.gridApi.core.notifyDataChange( uiGridConstants.dataChange.COLUMN );
        }
    }
Run Code Online (Sandbox Code Playgroud)

hic*_*086 5

您可以使用ui-grid的函数“ sortColumn”,如下所示:

$scope.gridApi.grid.sortColumn(column, directionOrAdd, add)
Run Code Online (Sandbox Code Playgroud)

这是此功能的源代码:ui-grid源代码

在您的示例中,它将给出以下内容:

 function updateSortColumn() {
        if ($rootScope.QuickSearch.sortBy !== undefined) {
            $scope.gridOptions.columnDefs.forEach(function (col) {
                if (col.field === $rootScope.QuickSearch.sortBy) {
                    $scope.gridApi.grid.sortColumn(col,$rootScope.QuickSearch.sortOrder);
                }
            });
        }
    }
Run Code Online (Sandbox Code Playgroud)

$ rootScope.QuickSearch.sortOrder必须位于(uiGridConstants.ASC | uiGridConstants.DESC)中。您不必提供它。

  • 我在3.1.1版中遇到了同样的问题。在遍历代码之后,我意识到我的问题是我正在传递像这样的列:$ scope.gridApi.grid.sortColumn($ scope.gridOptions.columnDefs [4],uiGridConstants.ASC,false); 这是对该列的错误引用。您需要这样传递它:$ scope.gridApi.grid.sortColumn($ scope.gridApi.grid.columns [4],uiGridConstants.ASC,false)。希望对别人有帮助。 (9认同)
  • 我已将ui-grid更新为v3.0.6-2015-09-08。现在我得到了sortColumn函数。我必须在调用此函数之前设置col.sort = {},否则会抛出异常,提示它无法对undefined设置priority = 0。(排序未定义)。排序现在可以再次正常运行,但是我的市长问题(更新为正确的排序指示器)仍然无法正常工作。它刚刚清除,但尚未更新。知道为什么吗? (4认同)