app.module.ts文件的作用是什么,我应该在里面做些什么?

18

我已经开始适应Angular 2,但对于app.module.ts文件有一些疑问。

  • 为什么我需要在此文件中导入,而我将在app.components.ts文件中再次进行导入。

例如:我导入了我的自定义管道,然后我必须再次在app.components.ts文件中导入它。

import { FirstPipePipe } from './first-pipe.pipe';

@NgModule({
     declarations: [
       AppComponent,
       SecondComponent,
       ThirdComponent,
       FirstComponent,
       FirstPipePipe
     ],
     imports: [
       BrowserModule, RouterModule.forRoot(appRoutes), HttpModule
     ],
     providers: [FetchDataService],
     bootstrap: [AppComponent]    })
< p > 然后我有

imports: [
           BrowserModule, RouterModule.forRoot(appRoutes), HttpModule
         ],

为什么我要导入某些类,而有些不需要?

这里为什么需要提供者,因为它们再次出现在app.component.ts中。

providers: [FetchDataService]

基本上,我需要重写我的app.component.ts文件中的所有内容。

app.module.ts的目的是什么?


阅读《避免在Angular中常见的模块混淆问题》(https://blog.angularindepth.com/avoiding-common-confusions-with-modules-in-angular-ada070e6891f)以了解更多关于Angular模块的常见困惑的避免方法。 - Max Koretskyi
1
我有一个YouTube视频,在这里解释了这个问题:https://www.youtube.com/watch?v=ntJ-P-Cvo7o - DeborahK
@DeborahK 谢谢分享这个视频。 - masterach
2个回答

21

模块是组织和分离代码的一种方式。 您可以拥有多个模块并延迟加载某些模块。

您可以将其他任何模块导入到 imports 部分中。

declarations 中声明任何组件。 在该模块的路由中使用的任何组件都必须在该模块中声明。 如果组件在另一个模块中使用,则只在该其他模块中列出它们。

您可以在 providers 部分中提供服务。

模块还有助于控制依赖注入... 您可以在组件级别或模块级别提供服务。 在模块级别提供服务会创建一个实例,可在整个模块共享。 如果在组件级别提供服务,则为该组件提供唯一实例。 为避免混淆,最好只在一个级别上提供服务-要么在模块级别,要么在每个需要它的组件级别。 对于我自己而言,大多数情况下,最好且最简单的方法是仅在模块级别提供服务。 对于pipes等情况也是如此,不过您制作的任何组件/管道仍必须在 declarations 中声明。


感谢全局和局部服务的解释... 所以基本上app.module中的导入和声明是在整个应用程序中共享的,对吧? - masterach
即使我已经在module.ts文件中提供了服务,为什么我仍然需要在本地组件中导入它? - masterach
1
你必须在组件中导入服务,以便编译器能够使用。但是如果该服务已经在模块中提供,则无需在组件中再次提供该服务。 - Tyler Jennings
@Tyler Jennings,我会删除有关在组件级别注入服务的评论。为了使它们对组件可用,它们需要在app.module.ts级别上声明。因此,仅在组件级别进行DI是不可能的。 - PatS

10

什么是app.module.ts的目的?

  • 它是启动您的应用程序并设置到其他模块的链接的作用。

1 - 模块是应用程序的逻辑层。每个模块都是为了将事物逻辑地打包,使人们更容易理解和维护应用程序,由多个模块组成。 例如,如果要制作一个丰富应用程序,则应该有一个LoginModule、一个AuthenticationModule等。

2 - 您需要在模块中导入文件以便Angular知道将要使用什么。基本上,您的LoginModule将需要Angular FormModule,而这可能不需要AuthenticationModule

3 - 这带我们来了:因此,AppModule只应导入与其链接的其他模块,并提供将需要全局使用的服务。您未来的LoginModule将不需要提供服务,但AuthenticationModule,它将具有AuthenticationService,很可能会需要提供服务。

这些都是基本概念,尝试阅读官方文档,其中提供了有关此主题的许多知识:https://angular.io/guide/ngmodule


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接