Every page gets access to a request, which has information about the current URL, route parameters, query parameters etc.
page : Shared.Model -> Request Params -> Page Model Msg
page _ request =
Page.element
{ init = init
, update = update
, view = view request
}
You can choose to pass this request into init
,update
, or any other function
that might need access to URL-related information.
{ url : Url
, key : Browser.Navigation.Key
, route : route
, params : params
, query : Dict String String
}
Here is an example request for the route /people/:name
-- /people/ryan
req.route == Route.People__Detail_ { name = "ryan" }
req.params == { name = "ryan" }
req.params.name == "ryan"
req.query == Dict.empty
And another example with a some query parameters:
-- /people/scott?allowed=false
req.route == Route.People__Detail_ { name = "scott" }
req.params == { name = "scott" }
req.params.name == "scott"
Dict.get "allowed" req.query == Just "false"
create : route -> params -> Url -> Browser.Navigation.Key -> Request route params
A convenience function for creating requests, used by elm-spa internally.
request : Request Route { name : String }
request =
Request.create (Route.fromUrl url)
{ name = "ryan" }
url
key