Functional programming 如何嵌入模块';将UI插入应用程序的某个区域';贝壳是什么?
如何将模块的UI嵌入应用程序外壳的某个区域 我有一个登录模块,我想把它拉到我的Elm应用程序的一个区域中。 然而,我不清楚如何做到这一点 具体来说,我如何引导登录模块来呈现我的应用程序外壳中的某个区域将作为UI公开的html 登录模块:Functional programming 如何嵌入模块';将UI插入应用程序的某个区域';贝壳是什么?,functional-programming,elm,Functional Programming,Elm,如何将模块的UI嵌入应用程序外壳的某个区域 我有一个登录模块,我想把它拉到我的Elm应用程序的一个区域中。 然而,我不清楚如何做到这一点 具体来说,我如何引导登录模块来呈现我的应用程序外壳中的某个区域将作为UI公开的html 登录模块: module Login exposing (..) import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (..) -- MO
module Login exposing (..)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (..)
-- MODEL
type alias Model =
{ username : String, password : String }
model : Model
model =
Model "" ""
init : ( Model, Cmd Msg )
init =
( model, Cmd.none )
-- UPDATE
type Msg
= UserInput String
| PasswordInput String
| SignIn String String
update : Msg -> Model -> Model
update msg model =
case msg of
UserInput v ->
model
PasswordInput v ->
model
SignIn username password ->
model
-- VIEW
view : Model -> Html Msg
view model =
div []
[ input [ class "signin", type_ "submit", value "Signin", onClick <| SignIn (model.username) (model.password) ] []
, input [ class "signin", type_ "password", placeholder "password", onInput PasswordInput, value model.password ] []
, input [ class "signin", type_ "text", placeholder "username", onInput UserInput, value model.username ] []
]
view : Model -> Html Msg
view model =
div []
[ header [] [ Login.view ??? ]
]
注意:
这是在使用Prism框架进行WPF时编写UX的常用方法。为此需要做的是将其导入主模块中。然后为登录消息添加另一个顶级消息类型,并在更新函数中为其添加一个案例。代码看起来像这样
import Login
type alias Model =
{ loginModel : Login.Model
, (more stuff)
}
type alias Msg
= HandleLogin Login.Msg
| (more stuff)
update msg model =
case msg of
HandleLogin subMsg ->
let
newState = Login.update subMsg model.loginState
in
{ model | loginState = newState }
(more stuff)
view model =
div [] [
Html.map HandleLogin <| Login.view model.loginState
]
这将包装由login视图生成的消息,然后将它们传递回login update函数
您可以阅读更多关于Html.map的信息,您需要做的是将其导入主模块中。然后为登录消息添加另一个顶级消息类型,并在更新函数中为其添加一个案例。代码看起来像这样
import Login
type alias Model =
{ loginModel : Login.Model
, (more stuff)
}
type alias Msg
= HandleLogin Login.Msg
| (more stuff)
update msg model =
case msg of
HandleLogin subMsg ->
let
newState = Login.update subMsg model.loginState
in
{ model | loginState = newState }
(more stuff)
view model =
div [] [
Html.map HandleLogin <| Login.view model.loginState
]
这将包装由login视图生成的消息,然后将它们传递回login update函数
您可以阅读更多关于Html.map的信息,仅供参考:您可以删除
SignIn
union类型的属性,因为这两个字符串存储在您的模型中。您可以在更新功能中访问它们,而无需将它们传入。应用程序的示例如下:(查找Sub.map
,Cmd.map
,并且在View.elm文件中使用Html.map
)仅供参考:当两个字符串存储在您的模型中时,您可以删除SignIn
联合类型的属性。您可以在更新功能中访问它们,而无需将它们传入。应用程序的示例如下:(查找Sub.map
,Cmd.map
,并且Html.map
用于View.elm文件)