pages
views rendered at some url.
how routing works
With elm-spa, creating a file in src/Pages
automatically takes care of routing
and plugs your new page where it belongs in your layouts and single page app.
If you have a folder structure like this:
src/
Pages/
Top.elm
Guide.elm
NotFound.elm
Docs/
Dynamic.elm
Will generate routes like these:
Path | Elm file |
---|---|
/ |
src/Pages/Top.elm |
/guide |
src/Pages/Guide.elm |
/not-found |
src/Pages/NotFound.elm |
/docs/pages |
src/Pages/Docs/Dynamic.elm |
/docs/elm-spa |
src/Pages/Docs/Dynamic.elm |
/docs/deploying |
src/Pages/Docs/Dynamic.elm |
naming pages
The names of your files correspond to the routes in your app.
Creating an Example.elm
file tells elm-spa to generate the route /example
You can nest files in folders like SomeFolder/Example.elm
and that will
result in /some-folder/example
.
Note that capitalization in module names creates a dash (-
) in between the
URL.
top-level routes
To declare top-level routes (like for the homepage), elm-spa reserves the name
Top
to allow you to do things like this:
Path | Elm file |
---|---|
/ |
src/Pages/Top.elm |
/guide |
src/Pages/Guide/Top.elm |
/top |
src/Pages/Top/Top.elm |
Only the filename is reserved, so you can create /top
if you like!
dynamic routes
If you want to use the same page to match different routes, you can use
Dynamic
as the file or folder name.
The dynamic parameters will be available to your init
function.
Here are some examples:
src/Pages/Dynamic.elm
Path | Params |
---|---|
/foo |
{ param1 = "foo" } |
/bar |
{ param1 = "bar" } |
/123 |
{ param1 = "123" } |
src/Pages/Docs/Dynamic.elm
Path | Params |
---|---|
/docs/foo |
{ param1 = "foo" } |
/docs/bar |
{ param1 = "bar" } |
/docs/123 |
{ param1 = "123" } |
src/Pages/Dynamic/Dynamic.elm
Path | Params |
---|---|
/hello/foo |
{ param1 = "hello", param2 = "foo" } |
/from/bar |
{ param1 = "from", param2 = "bar" } |
/anything/123 |
{ param1 = "anything", param2 = "123" } |
choosing the right page
the following sections show off the 4 types of pages you can create with elm-spa!