utils columndefs angularjs user-interface angular-ui-grid

angularjs - columndefs - Rejilla angular ui guardar y restablecer el estado



ui-grid columndefs (4)

es relativamente fácil guardar el estado usando Angular $ cookies

function saveState() { var state = $scope.gridApi.saveState.save(); $cookies.put(''gridState'', JSON.stringify(state)); }

Entonces, para restaurar:

$scope.restoreState = function() { $timeout(function() { var state = JSON.parse($cookies.get(''gridState'')); if (state) { $scope.gridApi.saveState.restore($scope, state); }

Necesito saber cómo implementar guardar y restaurar el estado en una grilla angularui sin usar ningún botón. Necesito guardar el estado automáticamente cuando hagamos algún cambio en la grilla. Tenemos que restaurar automáticamente el estado guardado también. Incluso si actualizamos la página, debe restaurarse el estado guardado


Esto es lo que descubrí. No pude encontrar un solo evento para los cambios de estado de la cuadrícula, pero parece que tienen eventos individuales para casi todo. Aquí hay algunos que estoy usando. Acabo de establecer un punto de interrupción en la devolución de llamada onRegisterApi y busqué en el objeto gridApi para encontrar los eventos. http://plnkr.co/edit/LAMZvOkpx6jsD4CWSz04?p=preview

HTML:

<div ui-grid="gridOptions" ui-grid-selection ui-grid-resize-columns ui-grid-auto-resize ui-grid-move-columns ui-grid-grouping ui-grid-save-state> </div>

JS:

$scope.gridOptions = { data: [ { name: ''Jack'', title: ''manager'', phone: ''123456789'', location: ''india''}, { name: ''Suzy'', title: ''developer'', phone: ''465189798'', location: ''usa''}, { name: ''George'', title: ''secretary'', phone: ''82656517'', location: ''japan''}, { name: ''Michael'', title: ''analyst'', phone: ''31321687'', location: ''egypt''}, { name: ''Sara'', title: ''consultant'', phone: ''59595847'', location: ''germany''}, { name: ''Chris'', title: ''engineer'', phone: ''789456123'', location: ''russia''}, { name: ''Elizabeth'', title: ''clerk'', phone: ''963852741'', location: ''china''}, { name: ''Jane'', title: ''intern'', phone: ''147258369'', location: ''australia''}, { name: ''Bill'', title: ''accountant'', phone: ''951487623'', location: ''brazil''} ], columnDefs: [ { name: ''name'' }, { name: ''title'' }, { name: ''phone'' }, { name: ''location'' } ], enableGridMenu: true, enableRowSelection: true, enableRowHeaderSelection: false, enableColumnResizing: true, enableColumnReordering: true, enableFiltering: true, onRegisterApi: function(gridApi) { // Keep a reference to the gridApi. $scope.gridApi = gridApi; // Setup events so we''re notified when grid state changes. $scope.gridApi.colMovable.on.columnPositionChanged($scope, saveState); $scope.gridApi.colResizable.on.columnSizeChanged($scope, saveState); $scope.gridApi.grouping.on.aggregationChanged($scope, saveState); $scope.gridApi.grouping.on.groupingChanged($scope, saveState); $scope.gridApi.core.on.columnVisibilityChanged($scope, saveState); $scope.gridApi.core.on.filterChanged($scope, saveState); $scope.gridApi.core.on.sortChanged($scope, saveState); // Restore previously saved state. restoreState(); } }; function saveState() { var state = $scope.gridApi.saveState.save(); localStorageService.set(''gridState'', state); } function restoreState() { $timeout(function() { var state = localStorageService.get(''gridState''); if (state) $scope.gridApi.saveState.restore($scope, state); }); }


No pude encontrar un solo evento para los cambios de estado de la red =>

window.onbeforeunload = function(e) { $scope.saveState(); }; $scope.restoreState();

en caso de que quieras resetear la grilla

if(localStorage.getItem("justReset")!="1") $scope.restoreState(); localStorage.setItem("justReset","0")


Aquí hay un servicio fácil de usar con localforage

angular.module(''starter.controllers'') .factory(''SaveStateGridService'', function SaveStateGridService($timeout, $state, $rootScope) { var self = { stateName: null, keyLocalStorage: null, listener: null, init: function (gridApi) { self.stateName = $state.$current.name; self.keyLocalStorage = ''grid-'' + self.stateName; if (self.keyLocalStorage != null) { // save the state before we leave self.listerner = $rootScope.$on(''$stateChangeStart'', function (event, toState, toParams, fromState, fromParams, options) { if (fromState.name === self.stateName) { var item = gridApi.saveState.save(); localforage.setItem(self.keyLocalStorage, item); } self.listerner(); } ); //restore the state when we load if it exists localforage.getItem(self.keyLocalStorage, function (err, item) { if (item != null) { $timeout(function () { gridApi.saveState.restore(null, item); }, 1); } }); } } }; return self; });

Controlador / Componente

$scope.gridOptions.onRegisterApi = function (gridApi) { SaveStateGridService.init(gridApi); };

Html

<div ui-grid="gridOptions" ui-grid-save-state></div>