【问题标题】:Angular : Right project structure for an app with admin backendAngular:具有管理后端的应用程序的正确项目结构
【发布时间】:2019-05-10 17:24:31
【问题描述】:

我是 Angular 新手,刚刚读完《ng-book : The Complete book on Angular 6》一书。

我目前有一个简单的问题,但我找不到合适的答案。

我想像这样构建一个应用程序:

MainLayout :所有主要网站页面的基本布局。漂亮的页眉、页脚等。 AdminLayout :所有管理页面的基本布局。另一个带有左侧边栏的标题。

http://my-app.com : 具有多个路由的应用程序。所有路由共享相同的基本布局(MainLayout)

http:///my-app.com/admin : 相同的应用程序,相同的后端,但是它使用与主网站不同的布局(AdminLayout),但 /admin 的所有子路由共享相同的布局(AdminLayout)。

虽然我能做到:

  • 应用程序
    • 管理员
      • admin.module.ts(定义管理路由)
      • admin.component.ts(和 html 有一个路由器出口)
    • 主要
      • main.module.ts(定义主路由)
      • main.component.ts(和 html 有一个路由器出口)
    • app.module.ts(带路由器/空路由)
    • app-routing.component.ts(带路由器出口)

这是正确的做法吗?

谢谢

【问题讨论】:

    标签: angular


    【解决方案1】:

    您当前的实现是完美的。不过,我还想补充一些其他内容。

    确保你所说的所有路由都在主布局中,以及管理布局中,都是延迟加载的。

    因此,理想情况下,对于您正在创建的每条路由,您都必须创建一个模块和一个路由模块。这些路由以及将作为这些主要组件(您在路由配置中指定)的一部分呈现的组件和子组件将驻留在模块文件夹中。

    如果您认为有几个组件会在整个应用程序中重复使用,请考虑添加SharedModuleexport作为其中的一部分。

    另外,我觉得由于页眉和页脚是一次性组件,您应该考虑将它们移动到CoreModule,然后在您的AppModule 中导入CoreModule

    所有这些建议都来自您可能想要彻底阅读的Angular Style Guide

    【讨论】:

    • 感谢您的快速回复!请问为什么为每条路由创建一个新模块和一个新的路由模块更好?假设我想查看 app/main/news 中的新闻,为什么我不应该在 main.module.ts 中声明它的路由?此外,如果 main 和 admin 使用不同的页眉/页脚,为什么将它们提取到 CoreModule 并将其导入根模块 (AppModule) 会更好?在此先感谢:)!
    • 要回答您的第一个问题,最好延迟加载您可以在 Angular 应用程序中延迟加载的每条路线。 app/main/news 看起来像一个可以延迟加载的模块。那为什么不呢。为了延迟加载模块,有一个约定是为延迟加载的模块创建一个路由模块,并为延迟加载的模块提供一部分作为loadChildren 属性的值。
    • 为了回答你的第二个问题,我假设页眉和页脚对于主管理员和管理员来说都是相同的。如果情况并非如此,请忽略该建议。
    • 没错。 AppRoutingModule 将延迟加载 AdminModuleAdminRoutingModule 将延迟加载 UsersModule
    • 好吧,如果组件的外观和感觉是一样的,我相信它们应该在SharedModule。但如果不是这种情况,它们应该在各自的模块中。如果是这种情况,它们的选择器名称就不能相同。如果它们相同,您将收到一条错误消息:Unhandled Promise reject: Template parse errors: More than one component match on this element。确保只有一个组件的选择器可以匹配给定的元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多