我有一个index.html包含我的 Elm 应用程序的应用程序。Elm 应用程序将各种GETs 用于由与提供index.html.
而不是在我的 Elm 代码中为GETs硬编码 URL ,例如:
url =
"http://localhost:8080/api/tasks"
Run Code Online (Sandbox Code Playgroud)
有没有返回值的函数window.location.href?
我想做类似的事情:
url =
getHref() ++ "/api/tasks"
Run Code Online (Sandbox Code Playgroud)
这样,如果我将我的服务器移动到其他地方,我将不需要更新我的 Elm 代码中的所有 url。
虽然以上回答了您的问题,但我认为有一个更直接的解决方案:
如果应用程序代码是从与您要访问的 API 相同的服务器(URL)提供的,则无需指定服务器 - 只需指定 api 的根相对路径即可,即您可以/api/tasks从您的 elm 代码和浏览器会为你整理剩下的。
这就是我在部署的代码中解决问题的方式。
有elm-history包具有此location功能,但它已被弃用并且0.18版本不存在。
然后您可能想要使用elm-navigation包并在模型中显式存储当前位置。
请看看这个例子。可以通过以下方式创建带导航的程序:
Navigation.program UrlChange
{ init = init
, view = view
, update = update
, subscriptions = (\_ -> Sub.none)
}
Run Code Online (Sandbox Code Playgroud)
UrlChange 这是一种消息,它在每次 url 更改时触发,因此您可以处理它并设置当前位置:
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case msg of
UrlChange location ->
( { model | location = location }
, Cmd.none
)
Run Code Online (Sandbox Code Playgroud)
然后纯粹获取location.href模型可访问的任何地方。
在提供的应用程序中,这个地方是view:viewLocation model.location
例如,在您的应用程序中,它是这样的:
url model =
model.location.href ++ "/api/tasks"
Run Code Online (Sandbox Code Playgroud)