我对模块有些疑惑。我刚刚开始使用Angular 2,所以我搜索了太多主题,但我找不到任何令人满意的答案。
当我们创建angular 2应用程序时,肯定使用模块。当然也使用嵌套模块。我们可以使用多少个嵌套模块?这是可行的还是嵌套模块有限制?
例如,假设我有管理仪表板应用程序。我们可以像这样构建
app.module.ts
|
--dashboard
|
--dashboard.module.ts
|
--login
|
--login.module.ts
.
.
.
我们可以确保以这种方式构建。但是,假设我们有5个或更多嵌套模块,角度应用是否可以?可能导致任何问题或导致任何性能问题?或者我们应该保持简单(最多3个嵌套等)进行练习?
当嵌套模块和组件增加时,tsc如何表现?
总结一下什么是优点,缺点嵌套模块等,嵌套模块结构的最佳实践是什么?
答案 0 :(得分:10)
嵌套或不嵌套不是黑白情况。不幸的是,至于大多数软件开发,“它取决于。”
但是,我建议你考虑一下 - NgModule的重点(除了允许AOT的技术动机)是为你的应用程序提供更高级别的“单位”。换句话说,您可以将单个组件/服务/管道分组为离散分组,从而允许您将该分组视为提供一定功能的单个单元。在大多数情况下,这用于提供应用程序中的功能(所谓的“功能模块”),但NgModule系统也用于提供其他类型的横切关注点。实际上,库作者很容易将它们的库作为单个NgModule分发,封装了它们提供的所有功能。 (示例包括内置库,如HttpModule和FormsModule,还有MaterialModule,FlexLayoutModule等。)
这种将NgModule视为分发容器的用例有助于我思考如何对组件/服务/管道进行分组 - 这并不总是可行的,但我试着想我可以获取一个包含模块定义的文件夹,它的各个部分,应该能够将该文件夹放入任何其他应用程序,它应该基本上工作(假设存在其外部依赖项)。以这种方式思考它有助于我将重点放在制作NgModule的细节上。这并不是说我不在NgModule中嵌套文件夹,而只是因为嵌套的文件夹不会自动意味着我创建了一个NgModule - 除非这些项目作为某种类型的分发容器有意义,我不会打扰创建嵌套的NgModules只是为了匹配文件夹结构。
总而言之,您的文件夹结构并不自动意味着您为深层嵌套文件夹创建NgModule - 因此,可能不需要深度嵌套的NgModule设置。
答案 1 :(得分:1)
对我来说,使用NgModule
的主要目标是延迟加载;我不是角度逻辑/特征结构的粉丝。如果角度没有延迟加载,我可能只是用这种方式构造代码:
components/
services/
pipes/
models/
...
延迟加载,嵌套模块与不嵌套它们没有区别。我可能决定哪些代码在同一页面上加载了哪些代码。例如,即使两个组件感觉它们属于相同的功能但它们位于不同的页面上,我希望它们位于各自页面的模块上,以便更好地延迟加载。< / p>
所以,我目前以这种方式构建我的代码:
app
|
--services/
|
-- the services module called `CoreModule` in angular docs.
--shared/
|
-- the shared module described in angular docs. Has models as well.
--pages/
|
-- page1/
|
-- a module for page1/feature1 that I'll use in lazy-loaded manner (but may not do so if found unsuitable).
-- page2/
|
-- a module for page2/feature2 that ...
所以,回答你关于嵌套的具体问题:
login.module.ts
旁边的模块中导入dashboard
。作为避免嵌套的来源,请参阅Angular's official Style Guide中的“尽可能保持平面文件夹结构”原则。一般来说,Style Guide似乎是类似问题的好地方(刚发现它!)。