2016-08-21 40 views
3

我有一個像這樣的網址/user/3我在那裏發出一個http請求來獲取用戶信息。ELM-LANG當點擊瀏覽器後退按鈕時如何提出http請求

如果我移動到/user/6,我將發出另一個http請求來獲取此用戶數據。

我的問題是當我點擊瀏覽器後退按鈕時,url會移回/user/3,但它仍然是用戶6顯示的信息。

我該怎麼做?是否有可能讓我的舊模型回來?或者我必須再次提出http請求才能獲得用戶3

urlUpdate看起來是這樣的:

urlUpdate : Result String Route -> Model -> (Model, Cmd Msg) 
urlUpdate result model = 
    let 
    currentRoute = 
     Routing.routeFromResult result 

    in 
     ({ model | route = currentRoute }, Cmd.none) 

我有點失落,我不知道在哪裏可以做到這一點。

如果不清楚,我想「捕捉」一個事件,當用戶點擊瀏覽器後退按鈕來獲取舊的url,然後發出一個http請求來獲取這個用戶信息。

我使用elm-navigation包。

我已經嘗試做這在我的urlUpdate

urlUpdate : Result String Route -> Model -> (Model, Cmd Msg) 
urlUpdate result model = 
    let 
    currentRoute = 
     Routing.routeFromResult result 

    command = 
     case currentRoute of 
     Routing.HomeRoute -> 
      getUsers 
     Routing.userRoute id -> 
      getUser id 
     Routing.NotFoundRoute -> 
      Cmd.none 

    in 
     ({ model | route = currentRoute }, command) 

這是同樣的事情,我的初始化函數。它不起作用,因爲它使無限循環執行urlUpdate

+0

哪個路由包您使用? –

+0

我使用榆樹導航。我已經更新我的問題 – BoumTAC

回答

3

假設您正在使用elm-lang/navigation模塊。 urlUpdate當URL更改時(包括 擊中瀏覽器導航按鈕)被調用。

因此,要處理的URL變化的一種方式可以在你的urlUpdate函數的第二個返回值返回 HTTP訪問命令,而不是Cmd.none 。 當Task解決或失敗,Msg(在本例中,FetchFailFetchScucceed)將被拋出,因此 ,您可以通過update反應您的模型。

在下面的示例中,我更新了模型,以便您可以顯示微調器 ,直到API調用解析爲止。

樣本:

urlUpdate : Result String Route -> Model -> (Model, Cmd Msg) 
urlUpdate result model = 
    case result of 
    Ok url -> 
     let 
     userId = getUserId url 
     in 
     ({ model | spinner = True }, getUserInfo userId) 
    Err _ -> 
     ({ model | showErr = True }, Cmd.none) 

-- API call 
getUserInfo : String -> Cmd Msg 
getUserInfo str = 
    let 
    decodeUserInfo = Json.at ["args", "userid"] Json.string 
    url = "https://httpbin.org/get?userid=" ++ str 
    in 
    Task.perform FetchFail FetchSucceed (Http.get decodeUserInfo url) 
+0

我嘗試這樣的事情(我用示例更新我的問題),但它沒有工作,因爲它是一個無限循環,urlUpdate總是執行 – BoumTAC

+0

無限循環...你是否返回'update'函數中的'Cmd'?導航包提供了一些URL修改'Cmd'。 – Tosh

+0

是的,我在更新的命令中使用'getUser ID'。這是執行時,我在輸入他的編號後點擊一個按鈕 – BoumTAC

相關問題