帶標誌的程式
programWithFlags
與 program
只有一點不同。
它可以在 JavaScript 初始化時接受資料:
var root = document.body;
var user = { id: 1, name: "Bob" };
var app = Elm.Main.embed( root, user );
從 JavaScript 傳遞的資料稱為 Flags。
在此示例中,我們使用使用者資訊將 JavaScript 物件傳遞給 Elm,最好為 flags 指定 Type Alias。
type alias Flags =
{ id: Int
, name: String
}
標誌傳遞給 init
函式,產生初始狀態:
init : Flags -> ( Model, Cmd Msg )
init flags =
let
{ id, name } =
flags
in
( Model id name, Cmd.none )
你可能會注意到它與型別簽名的區別:
programWithFlags :
{ init : flags -> ( model, Cmd msg ) -- init now accepts flags
, update : msg -> model -> ( model, Cmd msg )
, subscriptions : model -> Sub msg
, view : model -> Html msg
}
-> Program flags
初始化程式碼看起來幾乎相同,因為它只是 init
函式不同。
main =
programWithFlags
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}