Route
Overview
As you add files in the src/Pages folder, the Route and Route.Path are regenerated to include all the latest pages throughout your application:
Route– Represents the full URL, including path, query parameters, hash fragments, and other URL stuffRoute.Path– Represents the URL path, which corresponds to a page file.
Each of these functions exposes an API for making navigation across pages easy. They also provide helpful functions like href that give you friendly compiler feedback when removing old pages. For that reason, Elm Land recommends using Route and Route.Path when linking to other pages within your app.
This guide will walk you through the functions you'll have access to in these generated modules!
"What routes are in my application?"
If you're ever curious about what routes exist, you can use the built-in elm-land routes command to list them!
Route
This module represents the full URL, and is provided to every page and route. It even includes a field the original elm/url value.
type alias Route params =
{ path : Route.Path.Path
, params : params
, query : Dict String String
, hash : Maybe String
, url : Url
}The generic params type variable allows certain routes to store type-safe dynamic parameters, whereas static pages, layouts, and the Shared module will use Route ().
Route.href
This function allows you to build a type-safe link to a page like /people?sort=name. If you don't need to specify query parameters or hash fragments, see Route.Path.href for a nicer API!
Definition
href :
{ path : Route.Path.Path
, query : Dict String String
, hash : Maybe String
}
-> Html.Attribute msgExample usage
--
-- Renders:
-- <a href="/people?sort=name">People page</a>
--
Html.a
[ Route.href
{ path = Route.Path.People
, query =
Dict.fromString
[ ( "sort", "name" )
]
, hash = Nothing
}
]
[ Html.text "People page" ]Route.toString
This function is similar to Route.href, but is helpful when getting absolute URL strings without rendering them with Html.a element.
If you don't need to specify query parameters or hash fragments, see Route.Path.toString for a nicer API!
Definition
toString :
{ route
| path : Route.Path.Path
, query : Dict String String
, hash : Maybe String
}
-> StringExample usage
Element.link
{ label = "People page"
, url =
Route.toString
{ path = Route.Path.People
, query =
Dict.fromString
[ ( "sort", "name" )
]
, hash = Nothing
}
}Route.Path
This module is generated to provide a type-safe way to link to other pages. Unlike Route, it doesn't store query parameters, hashes, or any other URL details.
Depending on your folder structure, the value of the Path type will be different. Underscores are used to separate folders. Here's an example folder structure and the corresponding generated Path custom type:
src/
└── Pages/
├── Home_.elm
├── Settings
│ ├── Account.elm
│ └── Notifications.elm
├── People.elm
└── People/
└── Id_.elmtype Path
= Home_
| Settings_Account
| Settings_Notifications
| People
| People_Id_ { id : String }
| NotFound_Route.Path.href
This function allows you to build a type-safe link to a page like /people.
Type definition
href : Path -> Html.Attribute msgExample usage
--
-- Renders:
-- <a href="/people">People page</a>
--
Html.a
[ Route.Path.href Route.Path.People ]
[ Html.text "People page" ]Route.Path.toString
This function is similar to Route.Path.href, but is helpful when getting absolute URL strings without rendering them with Html.a elements:
Type definition
toString : Path -> StringExample usage
Element.link
{ label = "People page"
, url = Route.Path.toString Route.Path.People
}
Elm Land