带标志的程序
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
}