This is part of a re-factor of template syntax and structure. The first phase breaks out template syntax into multiple documents. The second phase will be a rewrite of each doc. Specifically, this PR does the following: - Breaks sections of the current template syntax document each into their own page. - Corrects the links to and from these new pages. - Adds template syntax subsection to the left side NAV which contains all the new pages. - Adds the new files to pullapprove. PR Close #36954
		
			
				
	
	
		
			66 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Template statements
 | 
						|
 | 
						|
A template **statement** responds to an **event** raised by a binding target
 | 
						|
such as an element, component, or directive.
 | 
						|
 | 
						|
<div class="alert is-helpful">
 | 
						|
 | 
						|
See the <live-example name="template-syntax">Template syntax</live-example> for
 | 
						|
the syntax and code snippets in this guide.
 | 
						|
 | 
						|
</div>
 | 
						|
 | 
						|
The following template statement appears in quotes to the right of the `=` symbol as in `(event)="statement"`.
 | 
						|
 | 
						|
<code-example path="template-syntax/src/app/app.component.html" region="context-component-statement" header="src/app/app.component.html"></code-example>
 | 
						|
 | 
						|
A template statement *has a side effect*.
 | 
						|
That's the whole point of an event.
 | 
						|
It's how you update application state from user action.
 | 
						|
 | 
						|
Responding to events is the other side of Angular's "unidirectional data flow".
 | 
						|
You're free to change anything, anywhere, during this turn of the event loop.
 | 
						|
 | 
						|
Like template expressions, template *statements* use a language that looks like JavaScript.
 | 
						|
The template statement parser differs from the template expression parser and
 | 
						|
specifically supports both basic assignment (`=`) and chaining expressions with <code>;</code>.
 | 
						|
 | 
						|
However, certain JavaScript and template expression syntax is not allowed:
 | 
						|
 | 
						|
* <code>new</code>
 | 
						|
* increment and decrement operators, `++` and `--`
 | 
						|
* operator assignment, such as `+=` and `-=`
 | 
						|
* the bitwise operators, such as `|` and `&`
 | 
						|
* the [pipe operator](guide/template-expression-operators#pipe)
 | 
						|
 | 
						|
## Statement context
 | 
						|
 | 
						|
As with expressions, statements can refer only to what's in the statement context
 | 
						|
such as an event handling method of the component instance.
 | 
						|
 | 
						|
The *statement context* is typically the component instance.
 | 
						|
The *deleteHero* in `(click)="deleteHero()"` is a method of the data-bound component.
 | 
						|
 | 
						|
<code-example path="template-syntax/src/app/app.component.html" region="context-component-statement" header="src/app/app.component.html"></code-example>
 | 
						|
 | 
						|
The statement context may also refer to properties of the template's own context.
 | 
						|
In the following examples, the template `$event` object,
 | 
						|
a [template input variable](guide/built-in-directives#template-input-variable) (`let hero`),
 | 
						|
and a [template reference variable](guide/template-reference-variables) (`#heroForm`)
 | 
						|
are passed to an event handling method of the component.
 | 
						|
 | 
						|
<code-example path="template-syntax/src/app/app.component.html" region="context-var-statement" header="src/app/app.component.html"></code-example>
 | 
						|
 | 
						|
Template context names take precedence over component context names.
 | 
						|
In `deleteHero(hero)` above, the `hero` is the template input variable,
 | 
						|
not the component's `hero` property.
 | 
						|
 | 
						|
## Statement guidelines
 | 
						|
 | 
						|
Template statements cannot refer to anything in the global namespace. They
 | 
						|
can't refer to `window` or `document`.
 | 
						|
They can't call `console.log` or `Math.max`.
 | 
						|
 | 
						|
As with expressions, avoid writing complex template statements.
 | 
						|
A method call or simple property assignment should be the norm.
 |