在我的应用程序中,我在URL中保存了一个查询字符串(用户键入的搜索字符串)。
我有一个model={query: 'blabla'}
,我使用$location.search(model)
用我的参数更新网址。
当我点击刷新,或导航到另一个状态并返回时,我使用$stateParams.query
获取查询参数,然后将其分配给搜索框模型。
考虑下一个场景:
用户搜索:aa/bb/login?f=Student%20Home11
网址:...?query=aa%2Fbb%2Flogin%3Ff%3DStudent%2520Home11
(请注意,正斜率被编码为%2F,%20被编码为%2520,正如我所料,因为%20是用户输入的文字短语,而不是编码空间。) p>
问题:
导航到另一个状态后,在ui-router中的状态参数中也有query
(为了在这些状态之间切换时保留URL中的值),然后导航回来:
$stateParams.query:
AA%2Fbb%2Flogin%3FF%3DStudent%20Home11`
好像%2520
已解码为%20
,但所有其他编码(%2F
)仍保持编码状态。
然后,如果我解码它,我会在搜索框中得到一个空格(而不是%20
)。
在第二种情况下,点击 刷新 后(网址显然保持不变):
$stateParams
中的:aa/bb/login?f=Student%20Home11
应该是 - 所有正斜杠都被解码,而且'%'标志被解码但是'%20'按字面意思%20
。
导致这种奇怪行为的状态转变发生了什么?
答案 0 :(得分:0)
好吧,我发现了问题。
当我使用$state.go()
在状态之间移动时,我没有在状态之间发送$ stateParams,所以当我从另一个状态返回时,它可能会解析URL params而不是从状态获取params。
现在就工作。