2014-08-21 2 views
8

Я пытаюсь получить данные поиска и фильтрации данных из sessionStorage, когда страница обновляется.Угловая: область восстановления из sessionStorage

sessionStorage.restorestate возвращает undefined, знает ли кто-нибудь почему?

app.run(function($rootScope) { 
    $rootScope.$on("$routeChangeStart", function(event, next, current) { 
     if (sessionStorage.restorestate == "true") { 
     $rootScope.$broadcast('restorestate'); //let everything know we need to restore state 
     sessionStorage.restorestate = false; 
     } 
    }); 

    //let everthing know that we need to save state now. 
    window.onbeforeunload = function(event) { 
     $rootScope.$broadcast('savestate'); 
    }; 
    }); 

Plunkr: http://plnkr.co/edit/oX4zygwB0bDpIcmGFgYr?p=preview

+0

Это не похоже, 'sessionStorage' код настройки вызывается в вашем plnkr –

+0

@ExplosionPills: вы правы, извините за это. Он срабатывает, когда я изменяю маршрут, но sessionStorage.restorestate всегда не определен. –

+0

Плункер не использует 'ngRoute', поэтому никаких изменений маршрута не может быть. Плюс я не вижу ни одной строки кода, которая бы установила 'sessionStorage.restorestate' на что-нибудь, поэтому никогда не будет' 'true". Есть ли какой-то фрагмент кода? –

ответ

13

При обновлении страницы в угловом приложение, это как полностью перезагрузки приложения. Поэтому для восстановления из хранилища сеансов просто сделайте это, когда фабрика услуг будет выполнена.

app.factory('CustomerSearchService', ['$rootScope', 
    function($rootScope) { 
     ... 
     function restoreState() { 
      service.state = angular.fromJson(sessionStorage.CustomerSearchService); 
     } 
     if (sessionStorage.CustomerSearchService) restoreState(); 
     ... 
    } 
]); 

Сохраняющаяся часть была уже верной.

app.factory('CustomerSearchService', ['$rootScope', 
    function($rootScope) { 
     ... 
     function saveState() { 
      sessionStorage.CustomerSearchService = angular.toJson(service.state); 
     } 
     $rootScope.$on("savestate", saveState); 
     ... 
    } 
]); 

app.run(function($rootScope) { 
    window.onbeforeunload = function(event) { 
     $rootScope.$broadcast('savestate'); 
    }; 
}); 

DEMO

+0

Ty для этого отвечает, что он работает как шарм, попытается сделать его динамичным, поэтому я не нуждаюсь в новой услуге каждый раз, когда я этого хочу. –

+0

Я получаю ошибки на ссылках «service.state»: 'ReferenceError: service не определен'. Любая помощь? Где я могу получить объект 'service'? –

+1

@ AbhishekSaini 'service' - это объект, возвращенный фабрикой. Взгляните на демонстрацию, связанную с ответом (которая разветвляется с той, что находится в вопросе). –

Смежные вопросы