In meiner Anwendung speichern ich eine Abfragezeichenfolge (Benutzer eingegebene Suchzeichenfolge) in der URL. Ich habe eine model={query: 'blabla'}
und ich verwende $location.search(model)
, um die URL mit meinem Parameter zu aktualisieren. Wenn ich auf "Aktualisieren" klicke oder zu einem anderen Status und zurück navigiere, erhalte ich den Abfrageparameter unter Verwendung von $stateParams.query
, dann weise ich ihn dem Suchfeldmodell zu.
Betrachten Sie das nächste Szenario:
Benutzersuche: aa/bb/login?f=Student%20Home11
der URL: ...?query=aa%2Fbb%2Flogin%3Ff%3DStudent%2520Home11
(beachten Sie, dass Vorwärts-Schrägstriche% 2F kodiert werden, und daß% 20 bis% 2520 codiert ist, wie ich es erwarten würde, weil% 20 eine wörtliche Phrase ist, die der Benutzer eingegeben hat, kein codierter Raum).
das Problem:
nach in einem anderen Zustand zu navigieren, die auch query
in seinem Zustand params in ui-Router (um den Wert in der URL zu halten, wenn zwischen diesen Zuständen Schalen) hat, und dann Navigation zurück:
$stateParams.query:
aa% 2Fbb% 2Flogin% 3ff% 3DStudent% 20Home11`
als ob %2520
codiert %20
aber alle anderen Codierungen (%2F
) blieb decodiert wurde. Dann, wenn ich es decodiere, bekomme ich ein Leerzeichen (anstelle von) in das Suchfeld.
In einem zweiten Szenario, nach schlagen aktualisieren (die URL offensichtlich gleich bleibt):
in $stateParams
: aa/bb/login?f=Student%20Home11
wie sollte sein - alle Vorwärts-Schrägstriche decodiert werden und auch die '%' Zeichen wurde entschlüsselt, aber '% 20' bleibt wörtlich .
Was ist in dem Statusübergang passiert, der dieses merkwürdige Verhalten verursacht?