2015-09-16 4 views
6

Ich arbeite an einem eckigen Projekt, wo ich meine Zustände wie unten gezeigt gesetzt haben.angularjs ui-router stateparams unsichtbar verliert auf Seite aktualisieren

Wenn ich zur Ansicht navigiere, nimmt es die Parameter mit, so dass dieser Teil funktioniert.

Aber wenn ich die Seite aktualisiere, verliert es die Params. Ich weiß, dass wenn ich die Parameter in der url Variable definiert hat, wird es funktionieren. aber ich möchte es unsichtbar machen.

Ich habe etwas wie this gefunden, weiß aber nicht, ob es mein Problem beheben wird. kann es nicht funktionieren, wenn es funktioniert. Wer kann erklären, wie das geht?

Vielen Dank für Ihre Zeit

+2

Wenn Sie die App tatsächlich aktualisieren, wird die vollständige App neu gestartet. Daher werden keine vorherigen Daten in der App gespeichert. Der einzige Teil, der nicht aktualisiert wird, ist die URL. Also, wenn Sie das stateparam in der URL platzieren, wird es funktionieren, andernfalls müssen Sie localstorage oder etwas ähnliches verwenden, um die Daten zu speichern. – Indra

+0

ich sehe. aber ist es möglich, es auf lokalem Speicher zu speichern oder es für nur eine Seite zwischenzuspeichern und es dann zu entfernen, wenn es Zustände ändert? – DaCh

+0

Ja, das ist möglich. Für jede Route gibt es eine spezifische Auflösungsfunktion. In der spezifischen Route können Sie also Daten im lokalen Speicher festlegen und in anderen Fällen müssen Sie den lokalen Speicher löschen. – Indra

Antwort

4

konfrontiert ich das gleiche Problem und löste es mit diesem Code

angular.module('app').run(function($rootScope, $state, localStorageService) { 

    $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) { 
    var prefix = "stateParams."; 
    var fromStateName = prefix + fromState.name; 
    var toStateName = prefix + toState.name; 
    var f = true; 
    for (var k in toState.params) { 
    f = f && (JSON.stringify(toParams[k]) == JSON.stringify(toState.params[k])); 
    } 
    if (f && localStorageService.get(toStateName) != null) { 
    event.preventDefault(); 
    var savedToParams = localStorageService.get(toStateName); //retrieving toParams from local storage 
    localStorageService.remove(toStateName); 
    for (var k in toState.params) { 
     toParams[k] = savedToParams[k]; //update only the params {} not url params 
    } 
    $state.transitionTo(toState,toParams); 
    } else { 
    var toSave = {}; 
    for (var k in toState.params) { 
     toSave[k] = toParams[k]; //save only the params {} not url params 
    } 
    localStorageService.set(toStateName,toSave); 
    } 
    }); 

}); 

Gist

Ich versuche, die params zwischen Zustandsübergänge der localStorageService zu 'Cache' zu verwenden, .

, wenn von dem Zustand A zu dem Zustand B geht, I die zuvor gespeicherten params für A.

entferne ich überprüfen, um dann zu sehen, wenn die params, welche die params in der Zustandsdefinition von B nach B entsprechen gesendet werden, und wenn sie übereinstimmen, lade ich die Parameter von localStorage, weil dies bedeutet, dass der Benutzer die Aktualisierung durchgeführt hat und die Parameter zurückgesetzt wurden.

Ich habe diesen Code in einigen Fällen getestet, aber noch nicht vollständig getestet.

+0

Verdammt, ist localStorage die einzige Möglichkeit? Das oder Params in URLs übergeben? Gibt es einen anderen Weg? – AlxVallejo

+0

Wie ich weiß, gibt es nicht, Ihre App wird vollständig neu gestartet, wenn der Benutzer auf Aktualisieren trifft, so verlieren Sie Ihre Scope und Factory/Service-Daten und die einzige Möglichkeit, diese Daten zu erhalten, ist in der localStorage. –

+0

Dieser Artikel beschreibt die Verwendung von $ cookieStore für den Status bei der Aktualisierung. http://maffrigby.com/maintaining-session-info-in-angularjs-when-you-refresh-the-page/ – HungryArthur

Verwandte Themen