二十七、UI-Grid 保存和还原状态

原文:208 Save and restore state

“保存状态” 功能允许保存表格的当前外观, 并在返回到表格后恢复。

例如, 在应用程序中, 用户可以重新排列序、调整列宽、应用排序和筛选, 并选择特定的单元格。当用户把当前表格调整为自己喜欢的界面后, 跳转到另一个页面。然后重新返回这个页面时, 他们可能会期望它看起来像在他们离开时那样。保存状态功能就是这个作用。

saveState 功能的文档在 api 文档中提供, 特别是:

有两种核心方法:

  • save(保存),将表格当前状态打包成对象,然后将其存储到某个位置的对象 (cookie、会话状态、数据库)
  • restore(恢复), 获取表格状态对象, 并将表格返回到该对象中存储的状态

请注意, saveState 功能特意设置为存储瞬态状态-不在 gridOptions 或 columnDefs 中保存的信息。调用应用程序负责存储 gridOptions 和 columnDefs (并且必须有它们, 以便第一次呈现表格)。

该功能还提供了一些控制保存内容的选项。默认情况下, 所有选项都为 true:

  • saveWidths
  • saveOrder
  • saveScroll
  • saveFocus
  • saveVisible
  • saveSort
  • saveFilter
  • savePinning
  • saveGrouping
  • saveGroupingExpandedStates
  • saveTreeView
  • saveSelection

例子
在此示例中, 我们提供了一个按钮来保存表格状态。然后, 您可以将表格布局修改为不同的内容, 并使用 “还原” 按钮将表格设置为之前的状态。

代码
index.html

<!doctype html>
<html ng-app="app">
  <head>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular-touch.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular-animate.js"></script>
    <script src="http://ui-grid.info/docs/grunt-scripts/csv.js"></script>
    <script src="http://ui-grid.info/docs/grunt-scripts/pdfmake.js"></script>
    <script src="http://ui-grid.info/docs/grunt-scripts/vfs_fonts.js"></script>
    <script src="/release/ui-grid.js"></script>
    <script src="/release/ui-grid.css"></script>
    <script src="app.js"></script>
  </head>
  <body>
    <div ng-controller="MainCtrl">
      <div id="gridSaveState" ui-grid="gridOptions" ui-grid-save-state ui-grid-selection ui-grid-cellNav ui-grid-resize-columns ui-grid-move-columns ui-grid-pinning ui-grid-grouping class="grid"></div>
      <button id="save" type="button" class="btn btn-success" ng-click="saveState()">Save</button>
      <button id="restore" type="button" class="btn btn-success" ng-click="restoreState()">Restore</button>
    </div>
  </body>
</html>

main.css

.grid {
  width: 500px;
  height: 400px;
}

app.js

var app = angular.module('app', ['ngAnimate', 'ngTouch', 'ui.grid', 'ui.grid.saveState', 'ui.grid.selection', 'ui.grid.cellNav', 'ui.grid.resizeColumns', 'ui.grid.moveColumns', 'ui.grid.pinning', 'ui.grid.grouping' ]);
 
app.controller('MainCtrl', ['$scope', '$http', '$interval', function ($scope, $http, $interval) {
  $scope.gridOptions = {
    saveFocus: false,
    saveScroll: true,
    saveGroupingExpandedStates: true,
    enableFiltering: true,
    columnDefs: [
      { name: 'name' },
      { name: 'gender' },
      { name: 'company' }
    ],
    onRegisterApi: function(gridApi){
      $scope.gridApi = gridApi;
    }
  };
  $scope.state = {};
 
  $scope.saveState = function() {
    $scope.state = $scope.gridApi.saveState.save();
  };
 
  $scope.restoreState = function() {
    $scope.gridApi.saveState.restore( $scope, $scope.state );
  };
 
  $http.get('/data/100.json')
    .success(function(data) {
      $scope.gridOptions.data = data;
    });
}]);

Demo
这里写图片描述

文章来源:西柚叨叨的个人博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值