@NgModule修饰的class。 @NgModule利用一个元数据对象来告诉Angular如何去编译和运行代码。...---- NgModule的主要属性如下 1.declarations:模块内部Components/Directives/Pipes的列表,声明一下这个模块内部成员 ---- 2.providers...(Angular2中没有模块级别的service,所有在NgModule中声明的Provider都是注册在根级别的Dependency Injector中) ---- 3.imports:导入其他
declarations: 定义了该NgModule的组成部分:Components, directives和pipe等。 ?
An NgModule declares a compilation context for a set of components that is dedicated to an application...An NgModule can associate its components with related code, such as services, to form functional units...For example, to use the router service in your app, you import the Router NgModule....和JavaScript module一样,NgModule也能导入其他NgModule从而获得新的功能.
这主要是ts编译器版本问题,一般是因为ts编译器版本过高导致。 解决方式: npm uninstall -g typescript npm install -g...
下面是在 NgModule 中注册一个 service 的典型例子。...import { NgModule } from '@angular/core'; import { AuthService } from '..../auth.service'; @NgModule({ providers: [AuthService], }) class ExampleModule {} 上面的代码,因为 provide 和.../auth.service'; @NgModule({ providers: [ { provide: AuthService, useClass: AuthService...里: import { NgModule } from '@angular/core'; import { AuthService } from '.
该错误消息意思是创建Component时未指定其属于哪一个module,因此先用命令行ng g m parent创建一个名为parent的module:
/reducer'; import { NgModule } from '@angular/core'; import { CounterComponent } from '..../effects/book-manager.effect'; @NgModule({ imports: [ CommonModule, NgZorroAntdModule,
不过这ng2的文档不看不要紧,一看真的是有些蛋疼,随便看个啥,连码代码加理解,估计一下午也就能看一个简单的概念,就比如今天想归纳的NgModule这部分东西,前后大概有30几页的东西,所以我觉的如果不写点东西总结一下...因此ng2改用了以Decorator的方式来使代码具有语意性,如下 @NgModule({ imports: [ ... ], declarations: [ ... ], providers...: [ ... ], exports: [ ... ] }) export class FooModule { } 通过NgModule这个装饰器来对一个class进行描述。...这个概念在ng1中同样有,但是和上面指出的问题一样,就是没有代码层面的语意性描述,为了更好的描述它,ng2中的root-module会提供额外的装饰器属性来修饰它 @NgModule({ ...,
ExampleModule的declarations里有五个Components:
compiler@9.1.12/bundles/compiler.umd.js (29363:23) Component ProductListComponent is not part of any NgModule
本文以SAP Spartacus的DefaultConfigurationChunk这个injection token 的注入为例:
对应我在NgModule的providers区域里定义的providers record: ? ? 在一个for循环里依次按顺序注入这8个types对应的值: ?
其命名约定意味着,在调用 forRoot() 方法时,必须向应用程序的根 NgModule 注册给定模块。 那为什么它需要在应用程序的根 module 中调用,而不是任何其他 NgModule?...这个接口是一个被接受的 NgModule import 并且有两个属性: interface ModuleWithProviders { ngModule: Type providers...这与根 NgModule 有什么关系? 事实上,虽然这个约定暗示着它应用在应用程序的根目录中导入,但在许多情况下,我们可以在非根 NgModule 中导入它,同样会起作用。...当 Angular 引导根 NgModule 时,所有 NgModule 中的所有可用导入,都会在那时注册并可供整个应用程序使用——它们是全局的。...这就是为什么在子 NgModule 中注册的提供程序在整个应用程序中都可用的原因。
NgModule作为Angular模块的核心,下面首先就来讲一讲。 1....@NgModule的作用: NgModule 最根本的意义是帮助开发者组织业务代码,开发者可以利用 NgModule 把关系比较紧密的组件组织到一起,这是首要的。...NgModule 用来控制组件、指令、管道等是否可以使用,处于同一个 NgModule 里面的组件默认互相可见,而对于外部的组件来说,只能看到 NgModule 导出( exports )的内容,也就是说...NgModule 是打包时候用到的最小单位,打包的时候会检查所有 @NgModule 和路由配置,Angular底层是使用webpack打包。...@NgModule结构说明: @NgModule({ declarations: [], //属于当前模块的组件、指令及管道 imports: [], //当前模板所依赖的项,即外部模块(包括
、Overview Angular 入坑记录的笔记第七篇,介绍 Angular 中的模块的相关概念,了解相关的使用场景,以及知晓如何通过特性模块来组织我们的 Angular 应用 对应官方文档地址: NgModule...NgModule 使用根模块启动应用 常用模块 特性模块 二、Knowledge Graph ?...这种 Angular 内置的库也都是一个个的 NgModule,在开发中通过将组件、指令、管道、服务或其它的代码文件聚合成一个内聚的功能块,专注于系统的某个功能模块 常见的 NgModule 模块 模块名称...是一个带有 @NgModule 装饰器的类,通过函数的参数来描述这个模块,例如在上节笔记中创建的 CrisisModule,定义了我们在该特性模块中创建的组件,以及需要使用到的其它模块 ?...在使用 @NgModule 装饰器时,通常会使用到下面的属性来定义一个模块 declarations:当前模块中的组件、指令、管道 imports:当前模块所需的其它 NgModule 模块
有时在引导过程中,所有应用程序的 NgModule 都不可用。延迟加载就是这样一个例子。...当在路由期间延迟加载 NgModule 时,在延迟加载的 NgModule 中注册的 providers,提供程序及其子项在引导过程中不可用,此时 Angular 无法注册它们。...因此,它们仅在加载路由时才作为 providers 添加,而且它们的作用域是从延迟加载的 NgModule 及其子模块开始注入。...如果有多个延迟加载的 NgModule 尝试注册相同的提供程序,则 NgModule 树的每个节点都会以不同的实例结束。...作为消费者,当应用层序里使用到的某个库依赖项需要一个延迟加载的 NgModule 时,就需要调用其 forRoot 方法。
forRoot() 方法返回一个 NgModule 及其提供者 Providers 依赖项。...NgModule forRoot() 约定对 Angular 初学者来说是一个奇怪的约定:命名说明了如何使用它,但没有说明这样做的使用场景,即为什么需要以这种方式导入 NgModule。...以上的场景在我们引入延时加载的 NgModule 时会遇到挑战。被延迟加载的组件将无法共享相同的计数器值。 下面的例子仅仅在采取 eager 加载的组件场景中才能正常工作。...import { NgModule } from '@angular/core'; import { CounterService } from '....解决方案:在 SharedModule 里,开发一个 forRoot 方法: import { NgModule,ModuleWithProviders } from '@angular/core';
例子: @NgModule({ providers: [AService] }) export class A {} -----------------------------------...另一种方式也能工作: @NgModule({ providers: [AService] }) class A {} export const moduleWithProviders = {...ngModule: A, providers: [AService] }; ---------------------- @NgModule({ imports: [moduleWithProviders...ngModule: A, providers: [BService] }; ------------------------------------------ @NgModule({...--- @NgModule({ imports: [A.forRoot()] }) export class B // lazy loaded module @NgModule({
这种约定意味着,给定的模块必须在调用 forRoot()方法时,注册到应用程序的根 NgModule 中。...这个接口是一个可接受的NgModule导入接口,它有两个属性: interface ModuleWithProviders { ngModule: Type providers: Provider...[] } forRoot() 方法会返回一个 NgModule 及其依赖的提供商。...通常,当用@Injectable装饰一个类并在NgModule中注册为提供商时,这个类只创建一次,并且这个实例会在整个应用中共享。...当Angular引导根模块时,所有NgModule中所有可用的导入都会在那时注册,并对整个应用都可用——它们是全局的。这就是为什么注册在子NgModule中的提供商在整个应用中都是可用的。
有些时候,应用程序的所有ngmodule在引导过程中都不可用。延迟加载就是这样一个例子。...当在路由过程中惰性加载NgModule时,在惰性加载的NgModule中注册的提供商及其子模块在引导过程中不可用,Angular 那时无法注册它们。...如果有多个惰性加载 NgModule 试图注册相同的提供商,那么 NgModule 树中的每个节点最终都会拥有不同的实例。...在其他 ngmodule中,必要时使用 import 的非根形式来导入组件和指令。...当一个特性 NgModule 导出的组件和指令需要共享相同的自定义提供商实例时,请考虑用forRoot()方法在根NgModule中注册这些提供商。
领取专属 10元无门槛券
手把手带您无忧上云