每页简单页面应用程序作为单独的应用程序

时间:2016-10-26 08:23:11

标签: elm

目前,我无法将网页结构化为单独的应用。我目前的思维方式如下:

  • App / Main文件是提供路由的引导程序。
  • 该博客是一个单独的应用程序,具有自己的更新,模型和REST调用。
  • 当切换到另一条路线(例如相册)时,它将启动另一个具有自己的更新,模式等的Elm应用程序。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:6)

嗯,有不同的方法来实现这一目标:

<强> 1。一个Elm应用程序,每个页面作为一个单独的组件

在这种情况下,您创建一个“根”elm模块,它导入您的照片Model,Msg,init,update,view。 你的博客也一样。

然后你有1个榆树应用程序。这是我要采取的方法: 允许您管理全局前端状态,例如在一个位置以及照片和博客中的用户信息。

你的主榆文件看起来像这样:

import PhotoPage
import BlogPage

type alias Model =
  { photo : PhotoPage.Model
  , blog : BlogPage.Model
  , currentPage : Page
  }

type Page = Home | Blog | Photo

init = 
  { photo = PhotoPage.init
  , blog = BlogPage.init
  , currentPage = Home
  }

type Msg =
  GoHome
  | PhotoMsg PhotoPage.Msg
  | BlogMsg BlogPage.Msg

update msg model =
  case msg of
    PhotoMsg photoMsg ->
      let
        (newPhoto, photoCmd) = PhotoPage.update photoMsg model.photo
      in
        { model | photo = newPhoto }
        ! [ Cmd.map PhotoMsg photoCmd ]

<强> 2。完全独立的榆树应用

构建3个完全独立的应用/网站,每个应用/网站都有自己的index.html和自己的榆树应用。

您可以使用默认浏览器导航在不同的Elm应用之间导航。

如果你有办法在服务器/会话级别管理全局状态,这可能会有效。

您home.elm文件中的视图功能可能如下所示:

view model =
  div []
   [ h1 [] [ text "I am the homepage"]
   , a [ href "/photo" ] [ text "go to photo page" ]
   ]