В моем приложении я сохраняю строку запроса (пользовательская строка поиска) в URL-адресе. У меня есть model={query: 'blabla'}
и я использую $location.search(model)
чтобы обновить URL с помощью моего параметра. Когда я удаляю обновление или перехожу в другое состояние и обратно, я получаю параметр запроса с помощью $stateParams.query
, а затем присваиваю его модели окна поиска.
Рассмотрим следующий сценарий:
поиск пользователя: aa/bb/login?f=Student%20Home11
URL: ...?query=aa%2Fbb%2Flogin%3Ff%3DStudent%2520Home11
(обратите внимание, что косые черты кодов кодируются в% 2F и что %20 кодируется в% 2520, как и следовало ожидать, потому что %20 является буквальной фразой, введенной пользователем, а не закодированным пространством).
эта проблема:
после перехода в другое состояние, которое также имеет query
в своих параметрах состояния в ui-router (чтобы сохранить значение в URL-адресе при переключении между этими состояниями), а затем переходить назад:
$stateParams.query:
aa% 2Fbb% 2Flogin% 3Ff% 3DStudent %20Home11 '
как будто %2520
был декодирован до %20
но все остальные кодировки (%2F
) оставались закодированными. Затем, если я его декодирую, я получаю пробел (вместо %20
) в окне поиска.
Во втором сценарии после обновления обновления (очевидно, что URL-адрес остается прежним):
в $stateParams
: aa/bb/login?f=Student%20Home11
как и должно быть - все косые черты декодируются, а также знак "%" был декодирован, но " %20" остается буквально %20
.
Что произошло в состоянии перехода, которое вызывает это странное поведение?
Ну, я нашел проблему. Когда я использовал $state.go()
для перемещения между состояниями, я не отправлял $ stateParams между состояниями, поэтому, когда я вернулся из другого состояния, он, вероятно, проанализировал параметры URL вместо того, чтобы получать параметры из состояния. Работаю сейчас.