2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# Built-in directives
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Directives are classes that add additional behavior to elements
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								in your Angular applications.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								With Angular's built-in directives, you can manage forms, lists, styles, and what users see.
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< div  class = "alert is-helpful" >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								See the < live-example > < / live-example >  for a working example containing the code snippets in this guide.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / div >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								The different types of Angular directives are as follows:
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  [Components ](guide/component-overview )— directives with a template. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  This type of directive is the most common directive type.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								1.  [Attribute directives ](guide/built-in-directives#built-in-attribute-directives )— directives that change the appearance or behavior of an element, component, or another directive. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								1.  [Structural directives ](guide/built-in-directives#built-in-structural-directives )— directives that change the DOM layout by adding and removing DOM elements. 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								This guide covers built-in [attribute directives ](guide/built-in-directives#built-in-attribute-directives ) and [structural directives ](guide/built-in-directives#built-in-structural-directives ).
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{@a  attribute-directives}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## Built-in attribute directives
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Attribute directives listen to and modify the behavior of other HTML elements, attributes, properties, and components.
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Many NgModules such as the [`RouterModule` ](guide/router "Routing and Navigation" ) and the [`FormsModule` ](guide/forms "Forms" ) define their own attribute directives.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								The most common attribute directives are as follows:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  [`NgClass` ](guide/built-in-directives#ngClass )— adds and removes a set of CSS classes. 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  [`NgStyle` ](guide/built-in-directives#ngstyle )— adds and removes a set of HTML styles. 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								*  [`NgModel` ](guide/built-in-directives#ngModel )— adds two-way data binding to an HTML form element. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{@a  ngClass}
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## Adding and removing classes with `NgClass`
  
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								You can add or remove multiple CSS classes simultaneously with `ngClass` .
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< div  class = "alert is-helpful" >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								To add or remove a *single*  class, use [class binding ](guide/attribute-binding#class-binding ) rather than `NgClass` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / div >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								### Using `NgClass` with an expression
  
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								On the element you'd like to style, add `[ngClass]`  and set it equal to an expression.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								In this case, `isSpecial`  is a boolean set to `true`  in `app.component.ts` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Because `isSpecial`  is true, `ngClass`  applies the class of `special`  to the `<div>` .
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< code-example  path = "built-in-directives/src/app/app.component.html"  region = "special-div"  header = "src/app/app.component.html" > < / code-example >  
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								### Using `NgClass` with a method
  
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  To use `NgClass`  with a method, add the method to the component class. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  In the following example, `setCurrentClasses()`  sets the property `currentClasses`  with an object that adds or removes three classes based on the `true`  or `false`  state of three other component properties.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  Each key of the object is a CSS class name.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  If a key is `true` , `ngClass`  adds the class.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  If a key is `false` , `ngClass`  removes the class.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < code-example  path = "built-in-directives/src/app/app.component.ts"  region = "setClasses"  header = "src/app/app.component.ts" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  In the template, add the `ngClass`  property binding to `currentClasses`  to set the element's classes: 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < code-example  path = "built-in-directives/src/app/app.component.html"  region = "NgClass-1"  header = "src/app/app.component.html" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								For this use case, Angular applies the classes on initialization and in case of changes.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The full example calls `setCurrentClasses()`  initially with `ngOnInit()`  and when the dependent properties change through a button click.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								These steps are not necessary to implement `ngClass` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								For more information, see the < live-example ></ live-example >  `app.component.ts`  and `app.component.html` .
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{@a  ngstyle}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## Setting inline styles with `NgStyle`
  
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								You can use `NgStyle`  to set multiple inline styles simultaneously, based on the state of the component.
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  To use `NgStyle` , add a method to the component class. 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  In the following example, `setCurrentStyles()`  sets the property `currentStyles`  with an object that defines three styles, based on the state of three other component properties.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < code-example  path = "built-in-directives/src/app/app.component.ts"  region = "setStyles"  header = "src/app/app.component.ts" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  To set the element's styles, add an `ngStyle`  property binding to `currentStyles` . 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < code-example  path = "built-in-directives/src/app/app.component.html"  region = "NgStyle-2"  header = "src/app/app.component.html" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								For this use case, Angular applies the styles upon initialization and in case of changes.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								To do this, the full example calls `setCurrentStyles()`  initially with `ngOnInit()`  and when the dependent properties change through a button click.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								However, these steps are not necessary to implement `ngStyle`  on its own.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								See the < live-example ></ live-example >  `app.component.ts`  and `app.component.html`  for this optional implementation.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{@a  ngModel}
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## Displaying and updating properties with `ngModel`
  
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								You can use the `NgModel`  directive to display a data property and update that property when the user makes changes.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  Import `FormsModule`   and add it to the NgModule's `imports`  list. 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < code-example  path = "built-in-directives/src/app/app.module.ts"  header = "src/app/app.module.ts (FormsModule import)"  region = "import-forms-module" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  Add an `[(ngModel)]`  binding on an HTML `<form>`  element and set it equal to the property, here `name` . 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < code-example  path = "built-in-directives/src/app/app.component.html"  header = "src/app/app.component.html (NgModel example)"  region = "NgModel-1" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  This `[(ngModel)]`  syntax can only set a data-bound property.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								To customize your configuration, you can write the expanded form, which separates the property and event binding.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Use [property binding ](guide/property-binding ) to set the property and [event binding ](guide/event-binding ) to respond to changes.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The following example changes the `<input>`  value to uppercase:
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< code-example  path = "built-in-directives/src/app/app.component.html"  region = "uppercase"  header = "src/app/app.component.html" > < / code-example >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Here are all variations in action, including the uppercase version:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< div  class = "lightbox" >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  < img  src = 'generated/images/guide/built-in-directives/ng-model-anim.gif'  alt = "NgModel variations" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / div >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								### `NgModel` and value accessors
  
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								The `NgModel`  directive works for an element supported by a [ControlValueAccessor ](api/forms/ControlValueAccessor ).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Angular provides *value accessors*  for all of the basic HTML form elements.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								For more information, see [Forms ](guide/forms ).
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								To apply `[(ngModel)]`  to a non-form native element or a third-party custom component, you have to write a value accessor.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								For more information, see the API documentation on [DefaultValueAccessor ](api/forms/DefaultValueAccessor ).
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< div  class = "alert is-helpful" >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								When you write an Angular component, you don't need a value accessor or `NgModel`  if you  name the value and event properties according to Angular's [two-way binding syntax ](guide/two-way-binding#how-two-way-binding-works ).
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< / div >  
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{@a  structural-directives}
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## Built-in structural directives
  
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Structural directives are responsible for HTML layout.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								They shape or reshape the DOM's structure, typically by adding, removing, and manipulating the host elements to which they are attached.
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								This section introduces the most common built-in structural directives:
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								*  [`NgIf` ](guide/built-in-directives#ngIf )— conditionally creates or disposes of subviews from the template. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  [`NgFor` ](guide/built-in-directives#ngFor )— repeat a node for each item in a list. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  [`NgSwitch` ](guide/built-in-directives#ngSwitch )— a set of directives that switch among alternative views. 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								For more information, see [Structural Directives ](guide/structural-directives ).
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{@a  ngIf}
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## Adding or removing an element with `NgIf`
  
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								You can add or remove an element by applying an `NgIf`  directive to a host element.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								When `NgIf`  is `false` , Angular removes an element and its descendants from the DOM.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Angular then disposes of their components, which frees up memory and resources.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								To add or remove an element, bind `*ngIf`  to a condition expression such as `isActive`  in the following example.
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< code-example  path = "built-in-directives/src/app/app.component.html"  region = "NgIf-1"  header = "src/app/app.component.html" > < / code-example >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								When the `isActive`  expression returns a truthy value, `NgIf`  adds the `ItemDetailComponent`  to the DOM.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								When the expression is falsy, `NgIf`  removes the `ItemDetailComponent`  from the DOM and disposes of the component and all of its sub-components.
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								For more information on `NgIf`  and `NgIfElse` , see the [NgIf API documentation ](api/common/NgIf ).
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								### Guarding against `null`
  
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								By default, `NgIf`  prevents display of an element bound to a null value.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								To use `NgIf`  to guard a `<div>` , add `*ngIf="yourProperty"`  to the `<div>` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								In the following example, the `currentCustomer`  name appears because there is a `currentCustomer` .
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< code-example  path = "built-in-directives/src/app/app.component.html"  region = "NgIf-2"  header = "src/app/app.component.html" > < / code-example >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								However, if the property is `null` , Angular does not display the `<div>` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								In this example, Angular does not display the `nullCustomer`  because it is `null` .
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< code-example  path = "built-in-directives/src/app/app.component.html"  region = "NgIf-2b"  header = "src/app/app.component.html" > < / code-example >  
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{@a  ngFor}
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## Listing items with `NgFor`
  
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								You can use the `NgFor`  directive to present a list of items.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  Define a block of HTML that determines how Angular renders a single item. 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  To list your items, assign the short hand `let item of items`  to `*ngFor` . 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< code-example  path = "built-in-directives/src/app/app.component.html"  region = "NgFor-1"  header = "src/app/app.component.html" > < / code-example >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								The string `"let item of items"`  instructs Angular to do the following:
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  *  Store each item in the `items`  array in the local `item`  looping variable
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  Make each item available to the templated HTML for each iteration
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  Translate `"let item of items"`  into an `<ng-template>`  around the host element
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  Repeat the `<ng-template>`  for each `item`  in the list
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								For more information see the [Structural directive shorthand ](guide/structural-directives#shorthand ) section of [Structural directives ](guide/structural-directives ).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								### Repeating a component view
  
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								To repeat a component element, apply `*ngFor`  to the selector.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								In the following example, the selector is `<app-item-detail>` .
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< code-example  path = "built-in-directives/src/app/app.component.html"  region = "NgFor-2"  header = "src/app/app.component.html" > < / code-example >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								You can reference a template input variable, such as `item` , in the following locations:
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  *  within the `ngFor`  host element
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  within the host element descendants to access the item's properties
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								The following example references `item`  first in an interpolation and then passes in a binding to the `item`  property of the `<app-item-detail>`  component.
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< code-example  path = "built-in-directives/src/app/app.component.html"  region = "NgFor-1-2"  header = "src/app/app.component.html" > < / code-example >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								For more information about template input variables, see [Structural directive shorthand ](guide/structural-directives#shorthand ).
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								### Getting the `index` of `*ngFor`
  
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								You can get the `index`  of `*ngFor`  in a template input variable and use it in the template.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								In the `*ngFor` , add a semicolon and `let i=index`  to the short hand.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The following example gets the `index`  in a variable named `i`  and displays it with the item name.
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< code-example  path = "built-in-directives/src/app/app.component.html"  region = "NgFor-3"  header = "src/app/app.component.html" > < / code-example >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								The index property of the `NgFor`  directive context returns the zero-based index of the item in each iteration.
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Angular translates this instruction into an `<ng-template>`  around the host element,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								then uses this template repeatedly to create a new set of elements and bindings for each `item` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								in the list.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								For more information about shorthand, see the [Structural Directives ](guide/structural-directives#shorthand ) guide.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{@a  one-per-element}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## Repeating elements when a condition is true
  
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								To repeat a block of HTML when a particular condition is true, put the `*ngIf`  on a container element that wraps an `*ngFor`  element.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								One or both elements can be an `<ng-container>`  so you don't have to introduce extra levels of HTML.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Because structural directives add and remove nodes from the DOM, apply only one structural directive per element.
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								For more information about `NgFor`  see the [NgForOf API reference ](api/common/NgForOf ).
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{@a  ngfor-with-trackby}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								### Tracking items with `*ngFor` `trackBy`
  
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								By tracking changes to an item list, you can reduce the number of calls your application makes to the server.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								With the `*ngFor`  `trackBy`  property, Angular can change and re-render only those items that have changed, rather than reloading the entire list of items.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  Add a method to the component that returns the value `NgFor`  should track. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  In this example, the value to track is the item's `id` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  If the browser has already rendered `id` , Angular keeps track of it and doesn't re-query the server for the same `id` .
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < code-example  path = "built-in-directives/src/app/app.component.ts"  region = "trackByItems"  header = "src/app/app.component.ts" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  In the short hand expression, set `trackBy`  to the `trackByItems()`  method. 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < code-example  path = "built-in-directives/src/app/app.component.html"  region = "trackBy"  header = "src/app/app.component.html" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								**Change ids** creates new items with new `item.id` s.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								In the following illustration of the `trackBy`  effect, **Reset items**  creates new items with the same `item.id` s.
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								*  With no `trackBy` , both buttons trigger complete DOM element replacement. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*  With `trackBy` , only changing the `id`  triggers element replacement. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< div  class = "lightbox" >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  < img  src = "generated/images/guide/built-in-directives/ngfor-trackby.gif"  alt = "Animation of trackBy" > 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< / div >  
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< div  class = "alert is-helpful" >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Built-in directives use only public APIs.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								They do not have special access to any private APIs that other directives can't access.
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< / div >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{@a  ngcontainer}
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## Hosting a directive without a DOM element
  
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								The Angular `<ng-container>`  is a grouping element that doesn't interfere with styles or layout because Angular doesn't put it in the DOM.
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								You can use `<ng-container>`  when there's no single element to host the directive.
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Here's a conditional paragraph using `<ng-container>` .
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< code-example  path = "structural-directives/src/app/app.component.html"  header = "src/app/app.component.html (ngif-ngcontainer)"  region = "ngif-ngcontainer" > < / code-example >  
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< div  class = "lightbox" >  
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < img  src = 'generated/images/guide/structural-directives/good-paragraph.png'  alt = "ngcontainer paragraph with proper style" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / div >  
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  Import the `ngModel`  directive from `FormsModule` . 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  Add `FormsModule`  to the imports section of the relevant Angular module. 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  To conditionally exclude an `<option>` , wrap the `<option>`  in an `<ng-container>` . 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < code-example  path = "structural-directives/src/app/app.component.html"  header = "src/app/app.component.html (select-ngcontainer)"  region = "select-ngcontainer" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < div  class = "lightbox" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < img  src = 'generated/images/guide/structural-directives/select-ngcontainer-anim.gif'  alt = "ngcontainer options work properly" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  < / div > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{@a  ngSwitch}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## Switching cases with `NgSwitch`
  
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Like the JavaScript `switch`  statement, `NgSwitch`  displays one element from among several possible elements, based on a switch condition.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Angular puts only the selected element into the DOM.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								<!--  API Flagged  -->  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								`NgSwitch`  is a set of three directives: 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  *  `NgSwitch` — an attribute directive that changes the behavior of its companion directives.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  `NgSwitchCase` — structural directive that adds its element to the DOM when its bound value equals the switch value and removes its bound value when it doesn't equal the switch value.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *  `NgSwitchDefault` — structural directive that adds its element to the DOM when there is no selected `NgSwitchCase` .
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  On an element, such as a `<div>` , add `[ngSwitch]`  bound to an expression that returns the switch value, such as `feature` . 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Though the `feature`  value in this example is a string, the switch value can be of any type.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  Bind to `*ngSwitchCase`  and `*ngSwitchDefault`  on the elements for the cases. 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < code-example  path = "built-in-directives/src/app/app.component.html"  region = "NgSwitch"  header = "src/app/app.component.html" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  In the parent component, define `currentItem`  so you can use it in the `[ngSwitch]`  expression. 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < code-example  path = "built-in-directives/src/app/app.component.ts"  region = "item"  header = "src/app/app.component.ts" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								1.  In each child component, add an `item`  [input property ](guide/inputs-outputs#input "Input property" ) which is bound to the `currentItem`  of the parent component. 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  The following two snippets show the parent component and one of the child components.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  The other child components are identical to `StoutItemComponent` .
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < code-example  path = "built-in-directives/src/app/item-switch.component.ts"  region = "input"  header = "In each child component, here StoutItemComponent" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < div  class = "lightbox" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < img  src = "generated/images/guide/built-in-directives/ngswitch.gif"  alt = "Animation of NgSwitch" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Switch directives also work with native HTML elements and web components.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								For example, you could replace the `<app-best-item>`  switch case with a `<div>`  as follows.
							 
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< code-example  path = "built-in-directives/src/app/app.component.html"  region = "NgSwitch-div"  header = "src/app/app.component.html" > < / code-example >  
						 
					
						
							
								
									
										
										
										
											2020-11-28 12:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-03 09:52:53 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## What's next
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								For information on how to build your own custom directives, see [Attribute Directives ](guide/attribute-directives ) and [Structural Directives ](guide/structural-directives ).