角度核心/功能/共享模块:什么在哪里

Vad*_*huk 28 angular

首先,它不是任何其他问题的重复,我已经阅读了有关角度指南.不过我还有几个问题.

功能模块是最简单的 - 您有一个功能 - 将其分组到功能模块中.让我们说除了显而易见的功能外,我还有每个应用程序都有的页面:

  1. 主要登陆页面(不是app.template.html,而是它在路由器插座中首先呈现的内容)
  2. 错误页面,如404
  3. 联系页面,关于我们页面

我可能会将所有内容移动到名为"静态"的功能模块,但我不喜欢这个名称,也不喜欢将大多数不相关的内容分组到同一个模块中,即错误页面和联系页面.那么,提到的页面的模式是什么?

现在,共享vs核心模块.我有以下几项:

  1. CsrfService(听起来像我的核心)
  2. 记录器(angular2-logger服务)
  3. HttpModule(核心还是共享?)
  4. Logged-in-guard和AuthService(我使用AuthService使用NavbarComponent/NavbarModule和LoginComponent),那些功能(登录/身份验证)还是核心/共享?

因此,主要问题是如何选择我列出的项目以及那些新项目.

Sas*_*sxa 79

您的问题的答案是主观的,但是您可以遵循官方文档中的一些建议:我应该使用哪些模块以及如何使用它们?.如果您还没有阅读过文档NgModule和FAQ,我建议花几个小时研究它们,事情会更清楚(至少它们对我来说:)

我正在使用以下设置,它对来说效果很好:

  • app/shared - 这是我保留其他模块所需的小东西的模块.我有3子模块存在directives,components并且pipes,只是为了让事情组织好一点.例如:filesize.pipe,click-outside.directive,offline-status.component...
  • app/public - 在这个模块中,我保留了公共路由和顶级组件.例如:about.component,contact.component,app-toolbar.component
  • 应用程序/ 核心 - 应用程序需要(并且无法使用)的服务转到此处.例如:ui.service,auth.service,auth.guard,data.service,workers.service...
  • app/protected - 与public类似,仅适用于授权用户.该模块具有受保护的路由和顶级组件.例如:user-profile.component,dashboard.component,dashboard-sidebar.component...
  • app/features - 这是app功能所在的模块.它们由几个子模块组成.如果你的应用程序播放音乐,这就是player,playlist,favorites子模块会去.如果你看一下,@angular/material2这将等同于他们MaterialModule和许多子模块,如MdIconModule,MdSidenavModule等等.
  • app/dev - 我在开发时使用这个模块,不要在生产中发货.

一般建议是:

  • 按功能组织功能,而不是按页面组织
  • 在自己的模块中保留类似的路由(适合延迟加载)
  • 应用需要运行的服务转到核心
  • 你导入不止一次(或两次)的东西可能对分享有好处
  • 详细阅读文档,那里有很多好东西

为了回答您的具体问题:我把所有这些路线在一个模块中- ,static,public无论名称.CsrfService- 核心,Logger- 核心或开发HttpModule- 核心,你只需要一个实例(可能),auth- 核心.不要将服务放在共享中.

如果您无法决定在功能中分组的方式/内容,请创建一个新的应用程序,复制特定的功能文件夹,它也应该在那里工作.如果没有,你需要更好地组织事情.

  • @VadimKirilchuk,navbar共享.它不是核心模块.如果您有一个延迟加载的路由模块(例如:/ login),它可能还需要导航栏模块,因此需要导入它,因此它会导入共享模块.如果这个延迟加载的模块导入了核心模块,那将违反核心模块的原则,该核心模块仅在整个应用程序中加载一次. (2认同)