0

我将创建 ui-grid 并创建通过 localStorageService 将网格状态保存到 cookie 的功能。然后我更改列宽并保存此状态。在我通过'gridApi.saveState.restore'恢复状态并且这样做很完美之后,但是当我设置过滤器时,网格将列重置为默认宽度。如果我做错了什么,请告诉我。

    $scope.enableFiltering = function () {
      var isEnabledFiltering = localStorageService.get('enableFiltering');
      if (!_.isNull(isEnabledFiltering) && !_.isUndefined(isEnabledFiltering)) {
        return JSON.parse(isEnabledFiltering);
      }
      return false;
    };

    $scope.colDefs = [
      {
        displayName: locMsg['id'],
        field: 'id',
        enableHiding: true,
        visible: false,
        headerCellClass: 'header-filtered',
        filters: [{
          condition: uiGridConstants.filter.CONTAINS
        }]
      },
      {
        displayName: locMsg['name'],
        field: 'name',
        enableHiding: true,
        headerCellClass: 'header-filtered',
        filters: [{
          condition: uiGridConstants.filter.CONTAINS
        }],
      },];

    $scope.regularGridStateName = "grid";
    $scope.defaultGridStateName = "defaultGrid";
    $scope.gridOptions = {
      enableFiltering: $scope.enableFiltering(),
      enableGridMenu: true,
      columnDefs : $scope.colDefs
    };

    $scope.toggleFiltering = function () {
      $scope.gridOptions.enableFiltering = !$scope.gridOptions.enableFiltering;
      localStorageService.set('enableFiltering', $scope.gridOptions.enableFiltering);
      $scope.gridApi.core.notifyDataChange(uiGridConstants.dataChange.COLUMN);

      var gridState = localStorageService.get($scope.regularGridStateName);
      if (gridState) {
        gridApi.saveState.restore($scope, gridState);
      }
    };

    $scope.gridOptions.onRegisterApi = function (gridApi) {
      $scope.gridApi = gridApi;
      $scope.gridOptions.gridMenuCustomItems.push({
        title: 'Reset table',
        action: function () {
          var defaultState = localStorageService.get($scope.defaultGridStateName);
          localStorageService.set($scope.regularGridStateName, defaultState);
          if (defaultState) {
            gridApi.saveState.restore($scope, defaultState);
          }
        },
        order: 220
      });
      $scope.gridOptions.gridMenuCustomItems.push({
        title: 'Save table state',
        action: function () {
          localStorageService.set($scope.regularGridStateName, $scope.gridApi.saveState.save());
        },
        order: 221
      });

      $timeout(function () {
        gridStateService.saveDefaultStateIfNotExist($scope.defaultGridStateName, $scope.gridApi.saveState.save());

        var defaultState = localStorageService.get($scope.defaultGridStateName);
        if (!defaultState) {
          localStorageService.set($scope.regularGridStateName, $scope.gridApi.saveState.save());
        }

        var gridState = localStorageService.get($scope.regularGridStateName);
        if (gridState) {
          gridApi.saveState.restore($scope, gridState);
        }
      }, 10);
4

2 回答 2

0

我有类似的问题,这是由于列顺序的缓存。尝试以下

gridApi.saveState.restore(this.scope, this.scope.tableState);
var columnDefsColMov = gridApi.grid.moveColumns.orderCache;
columnDefsColMov.length = 0;
columnDefsColMov.push.apply(columnDefsColMov, gridApi.grid.columns.slice());
gridApi.core.notifyDataChange(this.uiGridConstants.dataChange.COLUMN);
于 2020-10-12T01:40:56.343 回答
0

此问题已解决,只需要更新到新版本即可。

于 2016-07-19T10:34:22.023 回答