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)
您可以使用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)中。您不必提供它。