2016-07-27 9 views
0

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?

Antwort

0

Nun, ich habe das Problem gefunden. Wenn ich $state.go() verwendet, um zwischen den Zuständen zu wechseln, habe ich $ stateParams nicht zwischen den Zuständen gesendet. Wenn ich aus dem anderen Status zurückkomme, hat es wahrscheinlich die URL-Parameter analysiert, anstatt die Parameter vom Status zu erhalten. Jetzt arbeiten.