Elm:父组件通过端口更新子组件

Elm:父组件通过端口更新子组件,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) ->

父组件是否可以将其传入端口的结果传递给子组件

我一直在看这个组合父/子组件()的示例。这是一个很好的例子,但我也想通过端口更新孩子的模型。这可能吗

index.js

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)