Elmの初期化方法
Elmのパラメータを渡す方法
Elmを張り付かせる
ElmでHtml側からパラメータを渡す方法、テンプレート内のdivへidでElmのコードを張り付かせて
<div id="usrId-10">
<script type="text/javascript">
var app = Elm.Func.init({
flags: {
"token": "Sj8slkusUHJ",
"usrId": 10
}
, node: document.getElementById('usrId-10')
});引数の定義
Elm側で取得する、まず受け取るための型を用意する、要素の型はjavascript側から渡される型と合わせておく。面倒なら全部Stringでも構いませんが、Elmがしっかりマーシャルしてくれるので合わせておいた方がいいでしょう。
type alias ArgInfo =
{ token : String
, usrId : Int
}モデルの定義
そして初期化でモデルへ引き継ぐ、モデルも同じく定義して
type alias Model =
{
token : String
, usrId : Int
, err : Maybe String
}初期化する方法
初期化は initialState で main で init に指定されているただの関数です、init へ直接書いても同じです。
main : Program ArgInfo Model Msg
main =
Browser.element
{ init = initialState
, view = view
, update = update
, subscriptions = subscriptions
}
...引数を取らない場合、こうなります、合わせてinitも引数を取らないよう書く必要があります。
main : Program () Model Msg
...そして、初期化でモデルを更新します。
initialState : ArgInfo -> ( Model, Cmd Msg )
initialState info =
( {
token = info.token
, usrId = info.usrId
, err = Nothing
}
, Cmd.none
)モデルの初期化
モデルが初期化されると、viewが呼ばれます、以後は update 経由でモデルが更新されます(今回は説明を省いています)。
view : Model -> Html Msg
view model =
span [ ] [ text (String.fromInt(model.usrId)) ]Elmは型に厳密なので、 text の型が
> Html.text
<function> : String -> Html.Html msgなので、 String.fromInt で Int から String へ変えろとしっかりやらされます(よいです)
Posted on 2021-01-26 19:48:20
