danhandrea/elm-router/4.1.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

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

replaceUrl

Same as redirect but uses `Browser.Navigation` replaceUrl

Events

type Event
= UrlRequested Url
| UrlChanged Url

Event

Basic router events