如何访问Angular UI Grid中排序后的行?

11

我正在使用Angular UI Grid来显示某些数据。排序已启用并初始化,同时也可以选择单行:

vm.gridOptions = {
    enableSorting: true,
    enableRowSelection: true,
    multiSelect: false,
    noUnselect: true,
    columnDefs: [
        { name: '#', field: 'ID' },
        { name: 'Name', field: 'CODE', sort: { direction: 'asc', priority: 1 } },
        { name: 'Comment', field: 'DESCR' },
    ],
    data: []
};

我能够选择一行,并按照“名称”列的升序排序,就像已经配置的那样。

UI Grid教程210所示,我已经添加了逻辑,在我的数据加载并添加到网格后自动选择第一个项目:

datacontext.getAllGcTab(vm.filter).then(function (result) {
    vm.gridOptions.data = result.results;
    vm.gridApi.selection.selectRow(vm.gridOptions.data[0]);
});

但是这段代码选择的是未排序数据的第一项。 我的网格中有大约500个项目,这不算多且性能良好,但在这种情况下,选择的项目在某个位置下方且不可见。

是否有任何选项可以直接访问UI Grid的行或已排序数据?

我知道外部排序可以解决这个问题,因为然后我将已经排序的数据分配给网格。 但是这对我来说似乎是不必要的开销...


这个问题很快会有解决方案 - 一旦发布了,我会回复一个答案。 - Spontifixus
有答案了吗? - Evan Fosmark
1个回答

12

$scope.gridApi.core.getVisibleRows() 返回当前排序/筛选顺序下的行数组。


1
如果它只返回实际可见的行,那么它是无用的。500行不太可能同时可见。 - Jesper
2
它返回整个数据集,我刚刚检查过了: $scope.gridOptions.data.length 返回的值与 $scope.gridApi.core.getVisibleRows().length 相同。 http://i.imgur.com/42N6EZA.png - Sergei Basharov
请注意,如果您应用了cellTemplates(例如12345 -> 12,345),则返回的数据是没有这种格式的数据 - J-Dizzle
@Jesper是正确的。在使用分页时,getVisibleRows()仅返回当前页面的行。 - HammerNL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接