我不知道如何访问多个查询参数.
源代码中没有示例.
我知道如何使用<?>
以下方法获取一个查询参数:
routeParser : Url.Parser (Route -> a) a
routeParser =
Url.oneOf
[ Url.map HomeRoute Url.top
, Url.map SettingsRoute (Url.s "settings" <?> Url.stringParam "sortBy")
]
parseLocation : Location -> Route
parseLocation location =
location
|> Url.parsePath routeParser
|> Maybe.withDefault NotFoundRoute
Run Code Online (Sandbox Code Playgroud)
随着parsePath
我可以得到Dict
与查询参数,但有使用优雅的方式<?>
?
编辑:
我用这个例子中elm-repl
:
> parsePath (s "blog" <?> stringParam "search" <?> stringParam "sortBy") (Location "" "" "" "" "" "" "/blog" "?search=cats&sortBy=name" "" "" "")
-- TYPE MISMATCH --------------------------------------------- repl-temp-000.elm
The 1st argument to function `parsePath` is causing a mismatch.
5| parsePath (s "blog" <?> stringParam "search" <?> stringParam "sortBy") (Location "" "" "" "" "" "" "/blog" "?search=cats&sortBy=name" "" "" "")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Function `parsePath` is expecting the 1st argument to be:
Parser (Maybe String -> Maybe String) (Maybe String)
But it is:
Parser (Maybe String -> Maybe String -> Maybe String) (Maybe String)
Hint: It looks like a function needs 1 more argument.
Run Code Online (Sandbox Code Playgroud)
您可以<?>
将多个查询参数链接在一起.假设您SettingsRoute
还期望一个pageNumber
整数参数:
type Route
= ...
| SettingsRoute (Maybe String) (Maybe Int)
Run Code Online (Sandbox Code Playgroud)
您的解析器可能如下所示:
Url.map SettingsRoute (Url.s "settings" <?> Url.stringParam "sortBy" <?> Url.intParam "pageNumber")
Run Code Online (Sandbox Code Playgroud)
传入URL中的查询参数不需要与map语句的顺序相同.以下示例将为上述路径提供相同的结果:
settings?sortBy=name&pageNumber=3
settings?pageNumber=3&sortBy=name
Run Code Online (Sandbox Code Playgroud)
编辑
您在REPL中添加了一个示例.您在REPL中遇到的问题是因为您没有正确映射到带有两个参数的内容.考虑REPL的这个例子:
> type alias SearchParams = { search : Maybe String, sortBy : Maybe String }
> parsePath (map SearchParams (s "blog" <?> stringParam "search" <?> stringParam "sortBy")) (Location "" "" "" "" "" "" "/blog" "?search=cats&sortBy=name" "" "" "")
Just { search = Just "cats", sortBy = Just "name" }
: Maybe.Maybe Repl.SearchParams
Run Code Online (Sandbox Code Playgroud)