私のアプリケーションでは、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はユーザーが入力した文字列であり、エンコードされたスペースではないため)。
問題:
、その後も(それらの状態の間で切り替えるときにURLに値を保つために)UI-ルータでその状態のparamsでquery
を持つ別の状態にナビゲートし、そして後にバックナビゲート:
%2520
あたかも
$stateParams.query:
AA%2Fbb%2Flogin%3FF%3DStudent%20Home11`
は%20
に復号されたが、他のすべてのエンコーディング(%2F
)が符号化されたにとどまりました。 それをデコードすると、検索ボックスに(%20
の代わりに)スペースが入ります。すべてのスラッシュがデコードされ、また、「%」記号 - しなければならないようaa/bb/login?f=Student%20Home11
:$stateParams
で
:リフレッシュを(URLは明らかに同じまま)打った後、2番目のシナリオで
、 '%20'は文字通り%20
のままです。
この奇妙な動作を引き起こす状態遷移には何が起こったでしょうか?