[英]Double state change in ui-router when using $state.go in $stateChangeStart
這是我的朋克 。 如果單擊profile
鏈接,然后查看生成的狀態更改列表:
stateChanges = [
" -> home",
"home -> profile",
"home -> signIn",
"signIn -> signIn"
]
您可以看到意外的額外狀態更改"signIn -> signIn"
。
我已經進行了一些調試,似乎它是用戶路由器通過afterLocationChange
函數對$locationChangeSuccess
的反應。 但是我不確定這是ui路由器中的錯誤還是我配置ui路由器以及如何管理重定向的結果。 如果行為是我的錯,我該如何解決?
我非常感謝您的幫助,因為雙重狀態更改導致查詢參數被雙重URL編碼: /profile -> %2Fprofile -> %252Fprofile
而不僅僅是前兩個。
似乎這是0.2.15附帶的內容。 我嘗試使用舊版本,甚至0.2.14都可以正常工作。 經過一番調查,我發現問題來自於48aeaff
提交。 如果我取消注釋該提交注釋掉的代碼,那么即使在0.2.15上,該問題也消失了。 現在,我將使用0.2.15的修改版本。
我還發現,在#1573
ui-router的問題跟蹤器中存在一個問題。
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
在瀏覽您的代碼時,我發現了以下代碼塊:
else if (authorized === true)
{
if (!service.authentication.authorized) {
$state.go("signIn", {
returnTo: toState.url
});
}
}
當您實際上從首頁->配置文件中單擊時,您將觀察到authorized = true,而service.authentication.authorized = false。 因此,您要讓瀏覽器導航到登錄狀態。 但是,您單擊了Profile,然后將瀏覽器返回到原來的狀態。
我刪除了語句event.preventDefault();
從上面的代碼塊來看,現在看來工作正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.