app .factory('StateService', function ($localStorage, $state) { var defaultState = { limit: 25, page: 1, predicate: 'id', reverse: true, search: {} }; return { state: function ($scope, extend, subId) { if(angular.isUndefined(subId)) { subId = ''; } if (angular.isObject(extend)) { defaultState = angular.extend({}, defaultState, extend); } var ctrlId = $state.current.name + subId; $scope.limits = [5, 10, 25, 50, 100, 200]; if (angular.isUndefined($scope.filter)) { $scope.filter = {}; } angular.merge($scope.filter, defaultState); if (angular.isUndefined($localStorage.states)) { $localStorage.states = {}; } if (angular.isUndefined($localStorage.states[ctrlId])) { $localStorage.states[ctrlId] = {}; } angular.merge($scope.filter, $localStorage.states[ctrlId]); $scope.search = $scope.filter.search; $scope.$watch('filter', function () { $localStorage.states[ctrlId] = $scope.filter; }, true); } }; });