$ stateParams в угловом коде непоследовательно декодирует параметр URL

0

В моем приложении я сохраняю строку запроса (пользовательская строка поиска) в 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.

Что произошло в состоянии перехода, которое вызывает это странное поведение?

Теги:
angular-ui-router

1 ответ

0

Ну, я нашел проблему. Когда я использовал $state.go() для перемещения между состояниями, я не отправлял $ stateParams между состояниями, поэтому, когда я вернулся из другого состояния, он, вероятно, проанализировал параметры URL вместо того, чтобы получать параметры из состояния. Работаю сейчас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню