Elm:父组件通过端口更新子组件
父组件是否可以将其传入端口的结果传递给子组件 我一直在看这个组合父/子组件()的示例。这是一个很好的例子,但我也想通过端口更新孩子的模型。这可能吗 index.jsElm:父组件通过端口更新子组件,elm,Elm,父组件是否可以将其传入端口的结果传递给子组件 我一直在看这个组合父/子组件()的示例。这是一个很好的例子,但我也想通过端口更新孩子的模型。这可能吗 index.js var num = 0; setInterval(function () { num = num + 1 app.ports.tick.send(num) },1000); 埃尔姆港酒店 port module Ports exposing (..) port tick : (Int -> msg) ->
var num = 0;
setInterval(function () {
num = num + 1
app.ports.tick.send(num)
},1000);
埃尔姆港酒店
port module Ports exposing (..)
port tick : (Int -> msg) -> Sub msg
Main.elm(父级)
Widget.elm(子项)
您需要指定哪个子消息从端口接收int值。如果您将父订阅功能更新为此,它将发送小部件勾选消息:
Ports.tick(WidgetMsg那么Widget.elm是否必须以某种方式公开此tick
Msg类型?我得到以下错误:找不到变量'Widget.Msg.tick'66 | Ports.tick(WidgetMsg Oops,它只是一个小部件。勾选
。我已经更新了我的答案。非常感谢。这解决了我的问题。我不知道我有权访问小部件。直接勾选。)
import Widget
type Msg
= WidgetMsg Widget.Msg
update : Msg -> AppModel -> ( AppModel, Cmd Msg )
update message model =
case message of
WidgetMsg subMsg ->
let
( updatedWidgetModel, widgetCmd ) =
Widget.update subMsg model.widgetModel
in
( { model | widgetModel = updatedWidgetModel }, Cmd.map WidgetMsg widgetCmd )
subscriptions : AppModel -> Sub Msg
subscriptions model =
Ports.tick WidgetMsg
initialModel : Model
initialModel =
{ count = 0
, tickValue = 0
}
type Msg
= Increase
| Tick Int
update : Msg -> Model -> ( Model, Cmd Msg )
update message model =
case message of
Increase ->
( { model | count = model.count + 1 }, Cmd.none )
Tick val ->
({model | tickValue = val}, Cmd.none)