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を使ってパスを使ってルーティングすることもで きます。

results matching ""

    No results matching ""