2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# Property binding
 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Property binding in Angular helps you set values for properties of HTML elements or directives.
							 
						 
					
						
							
								
									
										
										
										
											2020-11-04 21:49:29 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								With property binding, you can do things such as toggle button functionality, set paths programmatically, and share values between components.
							 
						 
					
						
							
								
									
										
										
										
											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 > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								## Prerequisites
 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								To get the most out of property binding, you should be familiar with the following:
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								*  [Basics of components ](guide/architecture-components )
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*  [Basics of templates ](guide/glossary#template )
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*  [Binding syntax ](guide/binding-syntax )
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								## Understanding the flow of data
 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Property binding moves a value in one direction, from a component's property into a target element property.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< div  class = "alert is-helpful" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								For more information on listening for events, see [Event binding ](guide/event-binding ).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								To read a target element property or call one of its methods, see the API reference for [ViewChild ](api/core/ViewChild ) and [ContentChild ](api/core/ContentChild ).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								## Binding to a property
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								To bind to an element's property, enclose it in square brackets, `[]` , which identifies the property as a target property.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								A target property is the DOM property to which you want to assign a value.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								For example, the target property in the following code is the image element's `src`  property.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/app.component.html"  region = "property-binding"  header = "src/app/app.component.html" > < / code-example > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								In most cases, the target name is the name of a property, even when it appears to be the name of an attribute.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								In this example, `src`  is the name of the `<img>`  element property.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								The brackets, `[]` , cause Angular to evaluate the right-hand side of the assignment as a dynamic expression.
							 
						 
					
						
							
								
									
										
										
										
											2021-01-07 12:39:45 +03:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Without the brackets, Angular treats the right-hand side as a string literal and sets the property to that static value.
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/app.component.html"  region = "no-evaluation"  header = "src/app.component.html" > < / code-example > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Omitting the brackets renders the string `parentItem` , not the value of `parentItem` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								## Setting an element property to a component property value
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								To bind the `src`  property of an `<img>`  element to a component's property, place the target, `src` , in square brackets followed by an equal sign and then the property.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								The property here is `itemImageUrl` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/app.component.html"  region = "property-binding"  header = "src/app/app.component.html" > < / code-example > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Declare the `itemImageUrl`  property in the class, in this case `AppComponent` .
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/app.component.ts"  region = "item-image"  header = "src/app/app.component.ts" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-14 17:12:32 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								{@a  colspan}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#### `colspan` and `colSpan`
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								A common point of confusion is between the attribute, `colspan` , and the property, `colSpan` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Notice that these two names differ by only a single letter.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								If you wrote something like this:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< code-example  language = "html" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  < tr> < td colspan="{{1 + 1}}"> Three-Four< /td> < /tr> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / code-example > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								You'd get this error:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< code-example  language = "bash" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Template parse errors:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Can't bind to 'colspan' since it isn't a known native property
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / code-example > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								As the message says, the `<td>`  element does not have a `colspan`  property. This is true
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								because `colspan`  is an attribute— `colSpan` , with a capital `S` , is the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								corresponding property. Interpolation and property binding can set only *properties* , not attributes.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Instead, you'd use property binding and write it like this:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< code-example  path = "attribute-binding/src/app/app.component.html"  region = "colSpan"  header = "src/app/app.component.html" > < / code-example > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Another example is disabling a button when the component says that it `isUnchanged` :
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/app.component.html"  region = "disabled-button"  header = "src/app/app.component.html" > < / code-example > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Another is setting a property of a directive:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/app.component.html"  region = "class-binding"  header = "src/app/app.component.html" > < / code-example > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Yet another is setting the model property of a custom component— a great way
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								for parent and child components to communicate:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/app.component.html"  region = "model-property-binding"  header = "src/app/app.component.html" > < / code-example > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								## Toggling button functionality
 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								To disable a button's functionality depending on a Boolean value, bind the DOM `disabled`  property to a property in the class that is `true`  or `false` .
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/app.component.html"  region = "disabled-button"  header = "src/app/app.component.html" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Because the value of the property `isUnchanged`  is `true`  in the `AppComponent` , Angular disables the button.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/app.component.ts"  region = "boolean"  header = "src/app/app.component.ts" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								## Setting a directive property
 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								To set a property of a directive, place the directive within square brackets , such as `[ngClass]` , followed by an equal sign and the property.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Here, the property is `classes` .
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/app.component.html"  region = "class-binding"  header = "src/app/app.component.html" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								To use the property, you must declare it in the class, which in this example is `AppComponent` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								The value of `classes`  is `special` .
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/app.component.ts"  region = "directive-property"  header = "src/app/app.component.ts" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Angular applies the class `special`  to the `<p>`  element so that you can use `special`  to apply CSS styles.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								## Bind values between components
 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								To set the model property of a custom component, place the target, here `childItem` , between square brackets `[]`  followed by an equal sign and the property.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Here, the property is `parentItem` .
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/app.component.html"  region = "model-property-binding"  header = "src/app/app.component.html" > < / code-example > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								To use the target and the property, you must declare them in their respective classes.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Declare the target of `childItem`  in its component class, in this case `ItemDetailComponent` .
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								For example, the following code declares the target of `childItem`  in its component class, in this case `ItemDetailComponent` .
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Then, the code contains an `@Input()`  decorator with the `childItem`  property so data can flow into it.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/item-detail/item-detail.component.ts"  region = "input-type"  header = "src/app/item-detail/item-detail.component.ts" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Next, the code declares the property of `parentItem`  in its component class, in this case `AppComponent` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								In this example the type of `childItem`  is `string` , so `parentItem`  needs to be a string.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Here, `parentItem`  has the string value of `lamp` .
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/app.component.ts"  region = "parent-data-type"  header = "src/app/app.component.ts" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								With this configuration, the view of `<app-item-detail>`  uses the value of `lamp`  for `childItem` .
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								## Property binding and security
 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Property binding can help keep content secure.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								For example, consider the following malicious content.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/app.component.ts"  region = "malicious-content"  header = "src/app/app.component.ts" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								The component template interpolates the content as follows:
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/app.component.html"  region = "malicious-interpolated"  header = "src/app/app.component.html" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								The browser doesn't process the HTML and instead displays it raw, as follows.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< code-example  language = "bash" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								"Template < script> alert("evil never sleeps")< /script>  Syntax" is the interpolated evil title.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Angular does not allow HTML with `<script>`  tags, neither with [interpolation ](guide/interpolation ) nor property binding, which prevents the JavaScript from running.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								In the following example, however, Angular [sanitizes ](guide/security#sanitization-and-security-contexts ) the values before displaying them.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/app.component.html"  region = "malicious-content"  header = "src/app/app.component.html" > < / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Interpolation handles the `<script>`  tags differently than property binding, but both approaches render the content harmlessly.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								The following is the browser output of the sanitized `evilTitle`  example.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								< code-example  language = "bash" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								"Template Syntax" is the property bound evil title.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< / code-example > 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								## Property binding and interpolation
 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Often [interpolation ](guide/interpolation ) and property binding can achieve the same results.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								The following binding pairs do the same thing.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								< code-example  path = "property-binding/src/app/app.component.html"  region = "property-binding-interpolation"  header = "src/app/app.component.html" > < / code-example > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								You can use either form when rendering data values as strings, though interpolation is preferable for readability.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								However, when setting an element property to a non-string data value, you must use property binding.
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								## What's next
 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-28 16:26:58 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-10 17:06:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								*  [Property binding best practices ](guide/property-binding-best-practices )