簡體   English   中英

在$ stateChangeStart中使用$ state.go時,UI路由器中出現雙重狀態更改

[英]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而不僅僅是前兩個。

UPDATE

似乎這是0.2.15附帶的內容。 我嘗試使用舊版本,甚至0.2.14都可以正常工作。 經過一番調查,我發現問題來自於48aeaff提交。 如果我取消注釋該提交注釋掉的代碼,那么即使在0.2.15上,該問題也消失了。 現在,我將使用0.2.15的修改版本。

我還發現,在#1573 ui-router的問題跟蹤器中存在一個問題。

kk問題似乎出在您在$stateProvider添加的查詢字符串中

plunkr演示

    .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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM