danhandrea/elm-router/4.0.0

NOTE: the latest version is 4.3.0

Router

Router

Config

type alias Config msg route page pageMsg =
{ bind : Msg pageMsg -> msg
, parser : Parser (route -> route) route
, notFound : Url -> route
, init : route -> ( page, Cmd pageMsg )
, update : pageMsg -> page -> ( page, Cmd pageMsg )
, view : page -> Layout pageMsg
, subscriptions : page -> Sub pageMsg
, options : Options route msg
}

Config

bind
    Your router Msg eg `RouterMsg (Router.Msg Page.Msg)`


parser
    Your `Route` parser


notFound
    Your not found `Route`


init
    Your `Page` init


update
    Your `Page` update


view
    Your `Page` view


subscriptions
    Your `Page` subscriptions


options
    `Router` options

Options

type alias Options route msg =
{ cache : Cache route
, cacheExceptions : List String
, navigationDelay : Maybe Float
, onEvent : Maybe (Event -> msg)
}

Router options

cache
    cache strategy


cacheExceptions
    paths to ignore caching for, useful for pages like login
    where you don't want the inputs to remain filled.


navigation delay
    add delay to navigation so you can animate page transitions


onEvent
    receive notifications for Router events
type Cache route
= Always
| Never
| Custom (route -> Bool)

Cache rules

defaultOptions : Options route msg

default options

Always use cache


No exceptions


No navigation delay


No events

Router Msg

type Router route page

Router

type Msg pageMsg

Msg

Layout

type alias Layout msg =
{ title : Maybe String
, attrs : List (Attribute msg)
, main : List (Html msg)
}

Layout

title
    Set a title for each page.


attrs
    Attributes that will be set on the container.


main
    Html content to be set inside the container.

Basic

Config msg route page pageMsg
-> Url
-> Key
-> ( Router route page, Cmd msg )

init

Config msg route page pageMsg
-> Msg pageMsg
-> Router route page
-> ( Router route page, Cmd msg )

update

view : Config msg route page pageMsg -> Router route page -> Layout msg

view

subscriptions : Config msg route page pageMsg -> Router route page -> Sub msg

subscriptions

App url

onUrlChange : (Msg pageMsg -> msg) -> Url -> msg

onUrlChange

onUrlRequest : (Msg pageMsg -> msg) -> UrlRequest -> msg

onUrlRequest

Map

(model -> page)
-> (msg -> pageMsg)
-> ( model, Cmd msg )
-> ( page, Cmd pageMsg )

map update

mapView : (msgA -> msgB) -> Layout msgA -> Layout msgB

map view

Query

url : Router route page -> Url

currentUrl

route : Router route page -> route

currentRoute

page : Router route page -> Maybe page

currentPage

viewport : Router route page -> Maybe Viewport

currentViewPort

base : Router route page -> Url

base

Navigation

Config msg route page pageMsg
-> Router route page
-> String
-> ( Router route page, Cmd msg )

redirect

Config msg route page pageMsg
-> Router route page
-> ( Router route page, Cmd msg )

reload

This never results in a page load!
It will just re-init the current page

Events

type Event
= UrlRequested Url
| UrlChanged Url

Event

Basic router events