这是我的plunker。如果单击profile
链接并查看生成的状态更改列表:
stateChanges = [
" -> home",
"home -> profile",
"home -> signIn",
"signIn -> signIn"
]
你可以看到意外的额外状态变化"signIn -> signIn"
。
我做了一些调试,似乎是ui-router通过$locationChangeSuccess
函数对afterLocationChange
的反应。但我不确定这是否是ui-router中的错误,或者是我如何配置ui-router以及如何管理重定向的结果。如果行为是我的错,我该如何解决?
我非常感谢帮助,因为双状态更改导致我的查询参数被双重URL编码:/profile -> %2Fprofile -> %252Fprofile
而不是前两个。
这似乎是0.2.15附带的东西。我尝试使用旧版本甚至0.2.14工作正常。经过一番调查后,我发现问题来自于提交48aeaff
。如果我取消注释该提交注释掉的代码,即使在0.2.15上,这个问题也会消失。现在我将使用0.2.15的修改版本。
我还发现ui-router的问题跟踪器存在此问题#1573
。
答案 0 :(得分:0)
kk看起来问题出在您在$stateProvider
.state("signIn", {
parent: "frontpage",
url: "/signIn?returnTo", // <--- remove the ?returnTo
authorized: false,
views: {
"main@frontpage": {
template: "sign in page"
}
}
})
如果将其更改为/signIn
,则应该没问题。您可能无法将?queryStrings
放入stateProvider
分配中。
url: "/signIn" // It should work fine
答案 1 :(得分:0)
当我查看你的代码时,我找到了这个块:
else if (authorized === true)
{
if (!service.authentication.authorized) {
$state.go("signIn", {
returnTo: toState.url
});
}
}
当您实际从主页点击时 - &gt;配置文件,您将观察到authorized = true和service.authentication.authorized = false。因此,您要求浏览器导航到signIn状态。但是,您已经点击了“个人资料”,并且您将浏览器恢复到与之相同的状态。
我从上面的块中删除了event.preventDefault();
语句,现在看起来工作正常。