2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# NgModule API
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								At a high level, NgModules are a way to organize Angular apps
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								and they accomplish this through the metadata in the `@NgModule` 
							 
						 
					
						
							
								
									
										
										
										
											2018-07-02 12:06:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								decorator.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The metadata falls into three categories:
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  **Static:** Compiler configuration which tells the compiler about directive selectors and where in templates the directives should be applied through selector matching. This is configured via the `declarations`  array. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  **Runtime:** Injector configuration via the `providers`  array. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  **Composability/Grouping:** Bringing NgModules together and making them available via the `imports`  and `exports`  arrays. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								```typescript
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								@NgModule ({ 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // Static, that is compiler configuration
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  declarations: [], // Configure the selectors
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  entryComponents: [], // Generate the host factory
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // Runtime, or injector configuration
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  providers: [], // Runtime injector configuration
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // Composability / Grouping
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  imports: [], // composing NgModules together
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  exports: [] // making NgModules available to other parts of the app
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								})
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## `@NgModule` metadata
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								The following table summarizes the `@NgModule`  metadata properties.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< table >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < tr > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < th > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      Property
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < / th > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < th > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      Description
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < / th > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < / tr > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < tr > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < td  style = "vertical-align: top" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < code > declarations< / code > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < / td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      A list of [declarable ](guide/ngmodule-faq#q-declarable ) classes,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      (*components*, *directives* , and *pipes* ) that _belong to this module_ .
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      < ol > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < li > When compiling a template, you need to determine a set of selectors which should be used for triggering their corresponding directives.< / li > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < li > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          The template is compiled within the context of an NgModule— the NgModule within which the template's component is declared— which determines the set of selectors using the following rules:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          < ul > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            < li > All selectors of directives listed in `declarations` .</ li > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            < li > All selectors of directives exported from imported NgModules.< / li > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          < / ul > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < / li > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < / ol > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      Components, directives, and pipes must belong to _exactly_  one module.
							 
						 
					
						
							
								
									
										
										
										
											2018-07-02 12:06:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      The compiler emits an error if you try to declare the same class in more than one module. Be careful not to re-declare a class that is imported
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      directly or indirectly from another module.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < / td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < / tr > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < tr > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < td  style = "vertical-align: top" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < code > providers< / code > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < / td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      A list of dependency-injection providers.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      Angular registers these providers with the NgModule's injector.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      If it is the NgModule used for bootstrapping then it is the root injector.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      These services become available for injection into any component, directive, pipe or service which is a child of this injector.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      A lazy-loaded module has its own injector which
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      is typically a child of the application root injector.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      Lazy-loaded services are scoped to the lazy module's injector.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      If a lazy-loaded module also provides the `UserService` ,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      any component created within that module's context (such as by router navigation)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      gets the local instance of the service, not the instance in the root application injector.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      Components in external modules continue to receive the instance provided by their injectors.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-07-02 12:06:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      For more information on injector hierarchy and scoping, see [Providers ](guide/providers ) and the [DI Guide ](guide/dependency-injection ).
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < / td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < / tr > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < tr > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < td  style = "vertical-align: top" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < code > imports< / code > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < / td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      A list of modules which should be folded into this module. Folded means it is
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      as if all the imported NgModule's exported properties were declared here.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      Specifically, it is as if the list of modules whose exported components, directives, or pipes
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      are referenced by the component templates were declared in this module.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      A component template can [reference ](guide/ngmodule-faq#q-template-reference ) another component, directive, or pipe
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      when the reference is declared in this module or if the imported module has exported it.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      For example, a component can use the `NgIf`  and `NgFor`  directives only if the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      module has imported the Angular `CommonModule`  (perhaps indirectly by importing `BrowserModule` ).
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      You can import many standard directives from the `CommonModule` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      but some familiar directives belong to other modules.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      For example, you can use `[(ngModel)]`  only
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      after importing the Angular `FormsModule` .
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < / td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < / tr > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < tr > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < td  style = "vertical-align: top" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < code > exports< / code > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < / td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      A list of declarations— *component*, *directive* , and *pipe*  classes— that
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      an importing module can use.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      Exported declarations are the module's _public API_ .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      A component in another module can [use ](guide/ngmodule-faq#q-template-reference ) _this_ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      module's `UserComponent`  if it imports this module and this module exports `UserComponent` .
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      Declarations are private by default.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      If this module does _not_  export `UserComponent` , then only the components within _this_ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      module can use `UserComponent` .
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      Importing a module does _not_  automatically re-export the imported module's imports.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      Module 'B' can't use `ngIf`  just because it imported module 'A' which imported `CommonModule` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      Module 'B' must import `CommonModule`  itself.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      A module can list another module among its `exports` , in which case
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      all of that module's public components, directives, and pipes are exported.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      [Re-export ](guide/ngmodule-faq#q-reexport ) makes module transitivity explicit.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      If Module 'A' re-exports `CommonModule`  and Module 'B' imports Module 'A',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      Module 'B' components can use `ngIf`  even though 'B' itself didn't import `CommonModule` .
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < / td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < / tr > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < tr > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < td  style = "vertical-align: top" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < code > bootstrap< / code > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < / td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      A list of components that are automatically bootstrapped.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      Usually there's only one component in this list, the _root component_  of the application.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      Angular can launch with multiple bootstrap components,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      each with its own location in the host web page.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      A bootstrap component is automatically added to `entryComponents` .
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < / td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < / tr > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < tr > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < td  style = "vertical-align: top" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < code > entryComponents< / code > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < / td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      A list of components that can be dynamically loaded into the view.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      By default, an Angular app always has at least one entry component, the root component, `AppComponent` . Its purpose is to serve as a point of entry into the app, that is, you bootstrap it to launch the app.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      Routed components are also _entry components_  because they need to be loaded dynamically.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      The router creates them and drops them into the DOM near a `<router-outlet>` .
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      While the bootstrapped and routed components are _entry components_ ,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      you don't have to add them to a module's `entryComponents`  list,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      as they are added implicitly.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      Angular automatically adds components in the module's `bootstrap`  and route definitions into the `entryComponents`  list.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-16 20:19:47 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      That leaves only components bootstrapped using one of the imperative techniques, such as [`ViewComponentRef.createComponent()` ](api/core/ViewContainerRef#createComponent ) as undiscoverable.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      Dynamic component loading is not common in most apps beyond the router. If you need to dynamically load components, you must add these components to the `entryComponents`  list yourself.
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      For more information, see [Entry Components ](guide/entry-components ).
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    < / td > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < / tr > 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-04 10:58:20 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / table >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## More on NgModules
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								You may also be interested in the following:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  [Feature Modules ](guide/feature-modules ). 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  [Entry Components ](guide/entry-components ). 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  [Providers ](guide/providers ). 
						 
					
						
							
								
									
										
										
										
											2018-01-17 14:57:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  [Types of Feature Modules ](guide/module-types ).