角度中的$ stateParams解码URL参数不一致

时间:2016-07-27 12:04:02

标签: angularjs angular-ui-router

在我的应用程序中,我在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

导致这种奇怪行为的状态转变发生了什么?

1 个答案:

答案 0 :(得分:0)

好吧,我发现了问题。 当我使用$state.go()在状态之间移动时,我没有在状态之间发送$ stateParams,所以当我从另一个状态返回时,它可能会解析URL params而不是从状态获取params。 现在就工作。