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.
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
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
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