How can I get window.location.href in Elm?

为君一笑 提交于 2020-04-13 03:59:32

问题


I have an index.html which contains my Elm app. The Elm app uses various GETs to an API served by the same server as the one that serves the index.html.

Rather than hardcode the URLs in my Elm code for the GETs, e.g.:

url =
    "http://localhost:8080/api/tasks"

is there a function which returns the value of window.location.href?

I'd like to do something like:

url =
    getHref() ++ "/api/tasks"

In this way, if I move my server to somewhere else I will not need to update all the urls in my Elm code.


回答1:


There is elm-history package with the location function for this, but it's deprecated and doesn't exist for 0.18 version.

Then you might want to use elm-navigation package and explicitly store the current location in your model.

Please have a look at this example. A program with navigation can be created via:

Navigation.program UrlChange
    { init = init
    , view = view
    , update = update
    , subscriptions = (\_ -> Sub.none)
    }

UrlChange here is a type of message, which triggers on every url change, so you can process it and set the current location:

update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
    case msg of
        UrlChange location ->
            ( { model | location = location }
            , Cmd.none
            )

And then purely get the location.href wherever the model is accessible.

In the provided application, this place is view: viewLocation model.location

In your application, it's, for example, something like this:

url model =
    model.location.href ++ "/api/tasks"



回答2:


Whilst the above answers your question, I think there is a more straightforward solution to the problem:

If the application code is being served from the same server (URL) as the API you want to access you don't need to specify the server - just the root relative path for your api i.e. you can make requests to /api/tasks from your elm code and the browser will sort out the rest for you.

This is how I addressed the problem in my deployed code.



来源:https://stackoverflow.com/questions/51663630/how-can-i-get-window-location-href-in-elm

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!