Angular2: CoreModule vs SharedModule 在Angular2中,有两种模块供我们使用:CoreModule和SharedModule。这两个模块都可以用来组织和共享代码,但在使用时有一些不同之处。 CoreModule是一个只能由AppModule导入的模块。它主要用于导入和配置应用程序级别的服务、导入全局的第三方模块以及定义全局的组件、指令和管道。CoreModule通常只会被导入一次,因为它不会在应用程序中被重复使用。 SharedModule是一个可重用的模块,

52 浏览
0 Comments

Angular2: CoreModule vs SharedModule 在Angular2中,有两种模块供我们使用:CoreModule和SharedModule。这两个模块都可以用来组织和共享代码,但在使用时有一些不同之处。 CoreModule是一个只能由AppModule导入的模块。它主要用于导入和配置应用程序级别的服务、导入全局的第三方模块以及定义全局的组件、指令和管道。CoreModule通常只会被导入一次,因为它不会在应用程序中被重复使用。 SharedModule是一个可重用的模块,

有人可以解释一下SharedModuleCoreModule分别代表什么吗?

我注意到很多项目都在使用这种方法来构建他们的Angular项目。

  1. 为什么我需要两个模块?
  2. 我应该在什么时候引入每一个模块?
  3. 每个模块应该包含哪些importsexportsdeclarations
0
0 Comments

Angular2: CoreModule vs SharedModule问题的出现原因是为了更好地组织和管理Angular应用程序中的功能模块。在开发过程中,我们经常会遇到共享的组件、指令、管道等,这些功能模块可以在多个特性模块中被引用和复用。为了避免代码的冗余和重复,Angular提供了CoreModule和SharedModule两种模块的概念。

CoreModule是一个核心功能模块,它主要用于提供单例的服务和声明全局组件。在CoreModule中,我们可以将一些需要被多个模块共享和引用的服务,如HelperService、LoggerService等,进行提供。同时,一些在整个应用程序中都会用到的组件,如header、footer等,也可以在CoreModule中进行声明。CoreModule会将这些服务和组件注册到应用程序的根注入器中,使得任何需要它们的组件都可以访问到这些单例实例。只有根AppModule需要引入CoreModule,其他特性模块不需要引入。

SharedModule是一个共享功能模块,它主要用于声明可复用的组件、指令和管道,并将它们导出供其他特性模块使用。在SharedModule中,我们可以声明一些需要在多个特性模块中被引用和复用的组件、指令和管道。如果这些组件、指令和管道需要被其他特性模块使用,必须要将它们导出。同时,SharedModule也可以导入其他所有特性模块都需要使用的模块,如CommonModule和FormsModule。如果使用了Angular Material,也可以将Angular Material组件导入和重新导出在SharedModule中。但是需要注意的是,不建议在SharedModule中使用服务,因为服务通常是单例的,应该在整个应用程序或特定的特性模块中提供。

通过使用CoreModule和SharedModule,我们可以更好地组织和管理Angular应用程序中的功能模块,避免代码的冗余和重复,提高代码的可维护性和复用性。

参考链接:

- CoreModule: https://angular.io/guide/styleguide#core-feature-module

- SharedModule: https://angular.io/guide/styleguide#shared-feature-module

0
0 Comments

Angular2: CoreModule vs SharedModule

在使用Angular2开发过程中,我们经常会遇到一个问题:如何组织和管理模块的导入和导出。为了解决这个问题,有人提出了两种解决方案:CoreModule和SharedModule。

CoreModule的出现是为了保持app.module的干净整洁,避免在不同的文件中维护相同的模块导入列表。在CoreModule中,我们将只导入那些只需要导入一次的模块,比如那些具有forRoot方法的模块(这些模块导出了它们的提供者,只需要导入一次),以及一些提供者(比如使用ngrx时,需要在这里声明store)。

SharedModule则是用来存放我们希望在整个应用中重用的模块,比如CommonModule, HttpModule, RouterModule, MaterialModule, FlexLayoutModule等。

最后,在app.module中只需要导入CoreModule一次,并在所有的子模块中导入SharedModule即可。这样,如果我们需要为universal或其他平台创建另一个app.module,我们只需要导入CoreModule,而不需要在不同的文件中复制和维护整个模块列表。

但是,这个解决方案貌似与Angular的StyleGuide不符。StyleGuide中提到,应该将所有与资源相关的模块都导入到CoreModule中,比如CommonModule和FormsModule。同时,也提到了应该将CommonModule导入到SharedModule中。那么,CoreModule和SharedModule之间有什么区别呢?CommonModule应该放在哪里呢?

对此,有人给出了解释。他指出,CoreModule中应该只导入提供者,而不是其他模块。他认为,我的解释可能有误导性,因为我在CoreModule中同时导入了提供者和其他模块。他的解释符合官方文档的要求。

对于模块的组织和管理,我们可以使用CoreModule和SharedModule来解决问题。CoreModule用于导入只需要导入一次的模块和提供者,而SharedModule用于存放需要在整个应用中重用的模块。在app.module中只需要导入CoreModule一次,并在子模块中导入SharedModule即可。这样,我们可以避免在不同的文件中复制和维护整个模块列表,使代码更加简洁和易于维护。

参考链接:

- github.com/maxime1992/angular-ngrx-starter/tree/master/src/app

0
0 Comments

Angular2:CoreModule vs SharedModule

在Angular中,为了更好地组织和管理项目,开发者通常会将功能模块划分为多个模块。其中,CoreModule和SharedModule是两个常用的模块,它们有着不同的作用和使用方式。

CoreModule主要用于导入全局单例服务,而SharedModule用于导入在整个应用程序中都会使用的组件、指令和管道。

为什么需要两个模块?

在项目逐渐增长时,如果不将功能划分到特性模块中,会出现以下问题:

1. 根模块变得混乱,难以阅读和管理,需要导入所有依赖项、提供所有服务和声明所有组件、指令和管道。

2. 不同的功能之间没有明确的边界,导致不仅难以理解应用程序的结构,而且团队分工不清。

3. 可能会出现解决应用程序不同部分之间冲突的问题,例如,如果应用程序的两个不同部分具有相同功能的指令或组件,就必须使用更长的名称来区分它们,或者在导入时进行重命名。

为了解决这些问题,建议将应用程序划分为多个特性模块,并使用CoreModule和SharedModule来管理服务和共享组件等内容。

CoreModule是一个服务模块,用于导入应用程序启动时加载的单例服务。它应该只在根模块中导入一次,其他模块不应该导入CoreModule。

SharedModule是一个共享组件模块,用于导入在整个应用程序中都会使用的组件、指令和管道。它可以在需要共享组件的所有模块中导入,包括根模块。

需要注意的是,在SharedModule中不应该包含服务提供者,而且导入的其他模块也不应该包含服务提供者。服务应该被隔离到它们自己的模块中,以使其可以仅被导入一次。

总结起来,CoreModule用于导入全局单例服务,只在根模块中导入一次;SharedModule用于导入共享组件、指令和管道,可以在需要的所有模块中导入。

这些是根据Angular官方文档和一些实践经验得出的建议,并非硬性规定。根据实际情况,开发者可以根据需要做出调整。但在遵循这些指南之前,需要明确自己的目的和原因。

需要注意的是,最新的Angular文档中已经不再推荐使用CoreModule,而是使用providedIn: 'root'来实现单例服务。开发者可以根据自己的实际情况选择合适的做法。

参考链接:

- [Angular官方文档:NgModules](https://angular.io/guide/ngmodules)

- [Angular官方文档:CoreModule](https://angular.io/guide/styleguide#core-feature-module)

- [Angular官方文档:Singleton Services](https://angular.io/guide/singleton-services)

0