This page covers Elm 0.18
ルーティング
アプリケーションのルーティング設定を定義するモジュールsrc/Routing.elmを作成します。
このモジュールでは以下を定義します:
- アプリケーションのルート
- パスマッチャーを使用してブラウザパスをルートにマッチさせる方法
- ルーティングメッセージに反応する方法
src/Routing.elmでは:
module Routing exposing (..)
import Navigation exposing (Location)
import Players.Models exposing (PlayerId)
import UrlParser exposing (..)
type Route
= PlayersRoute
| PlayerRoute PlayerId
| NotFoundRoute
matchers : Parser (Route -> a) a
matchers =
oneOf
[ map PlayersRoute top
, map PlayerRoute (s "players" </> string)
, map PlayersRoute (s "players")
]
parseLocation : Location -> Route
parseLocation location =
case (parseHash matchers location) of
Just route ->
route
Nothing ->
NotFoundRoute
このモジュールを見てみましょう。
ルート
type Route
= PlayersRoute
| PlayerRoute PlayerId
| NotFoundRoute
これらはアプリケーションで利用可能なルートです。
NotFoundRouteは、ブラウザパスと一致するルートがない場合に使用されます。
マッチャー
matchers : Parser (Route -> a) a
matchers =
oneOf
[ map PlayersRoute top
, map PlayerRoute (s "players" </> string)
, map PlayersRoute (s "players")
]
ここではルートマッチャーを定義します。これらのパーサは、url-parserライブラリによって提供されます。
3つのマッチャーが必要です:
PlayersRouteに解決されるトップのルートのものPlayersRouteにも解決される/playersのためのものPlayerRoute idに解決される/players/idのためのもの
順序は重要であることに注意してください。
このライブラリの詳細はこちらをご覧くださいhttp://package.elm-lang.org/packages/evancz/url-parser。
パースロケーション
parseLocation : Location -> Route
parseLocation location =
case (parseHash matchers location) of
Just route ->
route
Nothing ->
NotFoundRoute
ブラウザ閲覧ロケーションが変わるたびに、ナビゲーション・ライブラリーはNavigation.Locationレコードを含むメッセージをトリガーします。mainの updateからこのレコードを引数としてparseLocationを呼び出します。
parseLocationはこのLocationレコードを解析し、可能ならば Routeを返す関数です。すべてのマッチャーが失敗した場合は、NotFoundRouteを返します。
この場合、ハッシュを使用してルーティングするので、UrlParser.parseHashを実行します。代わりに UrlParser.parsePathを使ってパスを使ってルーティングすることもで
きます。