1275 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			1275 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # AngularJS to Angular Concepts: Quick Reference
 | ||
| 
 | ||
| 
 | ||
| {@a top}
 | ||
| 
 | ||
| 
 | ||
| _Angular_ is the name for the Angular of today and tomorrow.
 | ||
| _AngularJS_ is the name for all v1.x versions of Angular.
 | ||
| 
 | ||
| This guide helps you transition from AngularJS to Angular
 | ||
| by mapping AngularJS syntax to the equivalent Angular syntax.
 | ||
| 
 | ||
| 
 | ||
| **See the Angular syntax in this <live-example name="ajs-quick-reference"></live-example>**.
 | ||
| 
 | ||
| ## Template basics
 | ||
| Templates are the user-facing part of an Angular application and are written in HTML.
 | ||
| The following table lists some of the key AngularJS template features with their equivalent Angular template syntax.
 | ||
| 
 | ||
| 
 | ||
| <table width="100%">
 | ||
| 
 | ||
|   <col width="50%">
 | ||
| 
 | ||
|   </col>
 | ||
| 
 | ||
|   <col width="50%">
 | ||
| 
 | ||
|   </col>
 | ||
| 
 | ||
|   <tr>
 | ||
| 
 | ||
|     <th>
 | ||
|       AngularJS
 | ||
|     </th>
 | ||
| 
 | ||
|     <th>
 | ||
|       Angular
 | ||
|     </th>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Bindings/interpolation
 | ||
| 
 | ||
|       <code-example hideCopy>
 | ||
|         Your favorite hero is: {{vm.favoriteHero}}
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       In AngularJS, an expression in curly braces denotes one-way binding.
 | ||
|       This binds the value of the element to a property in the controller
 | ||
|       associated with this template.
 | ||
| 
 | ||
|       When using the `controller as` syntax,
 | ||
|       the binding is prefixed with the controller alias (`vm` or `$ctrl`) because you
 | ||
|       have to be specific about the source of the binding.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Bindings/interpolation
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/movie-list.component.html" region="interpolation"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       In Angular, a template expression in curly braces still denotes one-way binding.
 | ||
|       This binds the value of the element to a property of the component.
 | ||
|       The context of the binding is implied and is always the
 | ||
|       associated component, so it needs no reference variable.
 | ||
| 
 | ||
|       For more information, see the [Interpolation](guide/template-syntax#interpolation)
 | ||
|       section of the [Template Syntax](guide/template-syntax) page.
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Filters
 | ||
| 
 | ||
|       <code-example hideCopy>
 | ||
|         <td>{{movie.title | uppercase}}</td>
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       To filter output in AngularJS templates, use the pipe character (|) and one or more filters.
 | ||
| 
 | ||
|       This example filters the `title` property to uppercase.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Pipes
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/app.component.html" region="uppercase"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       In Angular you use similar syntax with the pipe (|) character to filter output, but now you call them **pipes**.
 | ||
|       Many (but not all) of the built-in filters from AngularJS are
 | ||
|       built-in pipes in Angular.
 | ||
| 
 | ||
|       For more information, see [Filters/pipes](guide/ajs-quick-reference#filters-pipes) below.
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Local variables
 | ||
| 
 | ||
|       <code-example hideCopy format="">
 | ||
|         <tr ng-repeat="movie in vm.movies">
 | ||
|           <td>{{movie.title}}</td>
 | ||
|         </tr>
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       Here, `movie` is a user-defined local variable.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Input variables
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/app.component.html" region="local"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       Angular has true template input variables that are explicitly defined using the `let` keyword.
 | ||
| 
 | ||
|       For more information, see the [ngFor micro-syntax](guide/template-syntax#microsyntax)
 | ||
|       section of the [Template Syntax](guide/template-syntax) page.
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
| </table>
 | ||
| 
 | ||
| 
 | ||
| ## Template directives
 | ||
| AngularJS provides more than seventy built-in directives for templates.
 | ||
| Many of them aren't needed in Angular because of its more capable and expressive binding system.
 | ||
| The following are some of the key AngularJS built-in directives and their equivalents in Angular.
 | ||
| 
 | ||
| 
 | ||
| <table width="100%">
 | ||
| 
 | ||
|   <col width="50%">
 | ||
| 
 | ||
|   </col>
 | ||
| 
 | ||
|   <col width="50%">
 | ||
| 
 | ||
|   </col>
 | ||
| 
 | ||
|   <tr>
 | ||
| 
 | ||
|     <th>
 | ||
|       AngularJS
 | ||
|     </th>
 | ||
| 
 | ||
|     <th>
 | ||
|       Angular
 | ||
|     </th>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### ng-app
 | ||
| 
 | ||
|       <code-example hideCopy>
 | ||
|         <body ng-app="movieHunter">
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       The application startup process is called **bootstrapping**.
 | ||
| 
 | ||
|       Although you can bootstrap an AngularJS app in code,
 | ||
|       many applications bootstrap declaratively with the `ng-app` directive,
 | ||
|       giving it the name of the application's module (`movieHunter`).
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Bootstrapping
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/main.ts" header="main.ts"></code-example>
 | ||
|       <br>
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/app.module.1.ts" header="app.module.ts"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       Angular doesn't have a bootstrap directive.
 | ||
|       To launch the app in code, explicitly bootstrap the application's root module (`AppModule`)
 | ||
|       in `main.ts`
 | ||
|       and the application's root component (`AppComponent`) in `app.module.ts`.
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### ng-class
 | ||
| 
 | ||
|       <code-example hideCopy format="">
 | ||
|         <div ng-class="{active: isActive}">
 | ||
|         <div ng-class="{active: isActive,
 | ||
|                            shazam: isImportant}">
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       In AngularJS, the `ng-class` directive includes/excludes CSS classes
 | ||
|       based on an expression. That expression is often a key-value control object with each
 | ||
|       key of the object defined as a CSS class name, and each value defined as a template expression
 | ||
|       that evaluates to a Boolean value.
 | ||
| 
 | ||
|       In the first example, the `active` class is applied to the element if `isActive` is true.
 | ||
| 
 | ||
|       You can specify multiple classes, as shown in the second example.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### ngClass
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/app.component.html" region="ngClass"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       In Angular, the `ngClass` directive works similarly.
 | ||
|       It includes/excludes CSS classes based on an expression.
 | ||
| 
 | ||
|       In the first example, the `active` class is applied to the element if `isActive` is true.
 | ||
| 
 | ||
|       You can specify multiple classes, as shown in the second example.
 | ||
| 
 | ||
|       Angular also has **class binding**, which is a good way to add or remove a single class,
 | ||
|       as shown in the third example.
 | ||
| 
 | ||
|       For more information see the [Attribute, class, and style bindings](guide/template-syntax#other-bindings)
 | ||
|       section of the [Template Syntax](guide/template-syntax) page.
 | ||
| 
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### ng-click
 | ||
| 
 | ||
|       <code-example hideCopy format="">
 | ||
|         <button ng-click="vm.toggleImage()">
 | ||
|         <button ng-click="vm.toggleImage($event)">
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       In AngularJS, the `ng-click` directive allows you to specify custom behavior when an element is clicked.
 | ||
| 
 | ||
|       In the first example, when the user clicks the button, the `toggleImage()` method in the controller referenced by the `vm` `controller as` alias is executed.
 | ||
| 
 | ||
|       The second example demonstrates passing in the `$event` object, which provides details about the event
 | ||
|       to the controller.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Bind to the `click` event
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/app.component.html" region="event-binding"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       AngularJS event-based directives do not exist in Angular.
 | ||
|       Rather, define one-way binding from the template view to the component using **event binding**.
 | ||
| 
 | ||
|       For event binding, define the name of the target event within parenthesis and
 | ||
|       specify a template statement, in quotes, to the right of the equals. Angular then
 | ||
|       sets up an event handler for the target event. When the event is raised, the handler
 | ||
|       executes the template statement.
 | ||
| 
 | ||
|       In the first example, when a user clicks the button, the `toggleImage()` method in the associated component is executed.
 | ||
| 
 | ||
|       The second example demonstrates passing in the `$event` object, which provides details about the event
 | ||
|       to the component.
 | ||
| 
 | ||
|       For a list of DOM events, see: https://developer.mozilla.org/en-US/docs/Web/Events.
 | ||
| 
 | ||
|       For more information, see the [Event binding](guide/template-syntax#event-binding)
 | ||
|       section of the [Template Syntax](guide/template-syntax) page.
 | ||
| 
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### ng-controller
 | ||
| 
 | ||
|       <code-example hideCopy format="">
 | ||
|         <div ng-controller="MovieListCtrl as vm">
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       In AngularJS, the `ng-controller` directive attaches a controller to the view.
 | ||
|       Using the `ng-controller` (or defining the controller as part of the routing) ties the
 | ||
|       view to the controller code associated with that view.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Component decorator
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/movie-list.component.ts" region="component"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       In Angular, the template no longer specifies its associated controller.
 | ||
|       Rather, the component specifies its associated template as part of the component class decorator.
 | ||
| 
 | ||
|       For more information, see [Architecture Overview](guide/architecture#components).
 | ||
| 
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### ng-hide
 | ||
|       In AngularJS, the `ng-hide` directive shows or hides the associated HTML element based on
 | ||
|       an expression. For more information, see [ng-show](guide/ajs-quick-reference#ng-show).
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Bind to the `hidden` property
 | ||
|       In Angular, you use property binding; there is no built-in *hide* directive.
 | ||
|       For more information, see [ng-show](guide/ajs-quick-reference#ng-show).
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### ng-href
 | ||
| 
 | ||
|       <code-example hideCopy format="">
 | ||
|         <a ng-href="{{ angularDocsUrl }}">Angular Docs</a>
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       The `ng-href` directive allows AngularJS to preprocess the `href` property so that it
 | ||
|       can replace the binding expression with the appropriate URL before the browser
 | ||
|       fetches from that URL.
 | ||
| 
 | ||
|       In AngularJS, the `ng-href` is often used to activate a route as part of navigation.
 | ||
| 
 | ||
|       <code-example hideCopy format="">
 | ||
|         <a ng-href="#{{ moviesHash }}">Movies</a>
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       Routing is handled differently in Angular.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Bind to the `href` property
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/app.component.html" region="href"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       Angular uses property binding; there is no built-in *href* directive.
 | ||
|       Place the element's `href` property in square brackets and set it to a quoted template expression.
 | ||
| 
 | ||
|       For more information see the [Property binding](guide/template-syntax#property-binding)
 | ||
|       section of the [Template Syntax](guide/template-syntax) page.
 | ||
| 
 | ||
|       In Angular, `href` is no longer used for routing. Routing uses `routerLink`, as shown in the following example.
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/app.component.html" region="router-link"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       For more information on routing, see the [RouterLink binding](guide/router#router-link)
 | ||
|       section of the [Routing & Navigation](guide/router) page.
 | ||
| 
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### ng-if
 | ||
| 
 | ||
|       <code-example hideCopy format="">
 | ||
|         <table ng-if="movies.length">
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       In AngularJS, the `ng-if` directive removes or recreates a portion of the DOM,
 | ||
|       based on an expression. If the expression is false, the element is removed from the DOM.
 | ||
| 
 | ||
|       In this example, the `<table>` element is removed from the DOM unless the `movies` array has a length greater than zero.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### *ngIf
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/movie-list.component.html" region="ngIf"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       The `*ngIf` directive in Angular works the same as the `ng-if` directive in AngularJS. It removes
 | ||
|       or recreates a portion of the DOM based on an expression.
 | ||
| 
 | ||
|       In this example, the `<table>` element is removed from the DOM unless the `movies` array has a length.
 | ||
| 
 | ||
|       The (*) before `ngIf` is required in this example.
 | ||
|       For more information, see [Structural Directives](guide/structural-directives).
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### ng-model
 | ||
| 
 | ||
|       <code-example hideCopy format="">
 | ||
|         <input ng-model="vm.favoriteHero"/>
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       In AngularJS, the `ng-model` directive binds a form control to a property in the controller associated with the template.
 | ||
|       This provides **two-way binding**, whereby any change made to the value in the view is synchronized with the model, and any change to the model is synchronized with the value in the view.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### ngModel
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/movie-list.component.html" region="ngModel"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       In Angular, **two-way binding** is denoted by `[()]`, descriptively referred to as a "banana in a box". This syntax is a shortcut for defining both property binding (from the component to the view)
 | ||
|       and event binding (from the view to the component), thereby providing two-way binding.
 | ||
| 
 | ||
|       For more information on two-way binding with `ngModel`, see the [NgModel—Two-way binding to
 | ||
|       form elements with `[(ngModel)]`](../guide/template-syntax.html#ngModel)
 | ||
|       section of the [Template Syntax](guide/template-syntax) page.
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### ng-repeat
 | ||
| 
 | ||
|       <code-example hideCopy format="">
 | ||
|         <tr ng-repeat="movie in vm.movies">
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       In AngularJS, the `ng-repeat` directive repeats the associated DOM element
 | ||
|       for each item in the specified collection.
 | ||
| 
 | ||
|       In this example, the table row (`<tr>`) element repeats for each movie object in the collection of movies.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### *ngFor
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/movie-list.component.html" region="ngFor"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       The `*ngFor` directive in Angular is similar to the `ng-repeat` directive in AngularJS. It repeats
 | ||
|       the associated DOM element for each item in the specified collection.
 | ||
|       More accurately, it turns the defined element (`<tr>` in this example) and its contents into a template and
 | ||
|       uses that template to instantiate a view for each item in the list.
 | ||
| 
 | ||
|       Notice the other syntax differences:
 | ||
|       The (*) before `ngFor` is required;
 | ||
|       the `let` keyword identifies `movie` as an input variable;
 | ||
|       the list preposition is `of`, not `in`.
 | ||
| 
 | ||
|       For more information, see [Structural Directives](guide/structural-directives).
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### ng-show
 | ||
| 
 | ||
|       <code-example hideCopy format="">
 | ||
|         <h3 ng-show="vm.favoriteHero">
 | ||
|           Your favorite hero is: {{vm.favoriteHero}}
 | ||
|         </h3>
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       In AngularJS, the `ng-show` directive shows or hides the associated DOM element, based on
 | ||
|       an expression.
 | ||
| 
 | ||
|       In this example, the `<div>` element is shown if the `favoriteHero` variable is truthy.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Bind to the `hidden` property
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/movie-list.component.html" region="hidden"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       Angular uses property binding; there is no built-in *show* directive.
 | ||
|       For hiding and showing elements, bind to the HTML `hidden` property.
 | ||
| 
 | ||
|       To conditionally display an element, place the element's `hidden` property in square brackets and
 | ||
|       set it to a quoted template expression that evaluates to the *opposite* of *show*.
 | ||
| 
 | ||
|       In this example, the `<div>` element is hidden if the `favoriteHero` variable is not truthy.
 | ||
| 
 | ||
|       For more information on property binding, see the [Property binding](guide/template-syntax#property-binding)
 | ||
|       section of the [Template Syntax](guide/template-syntax) page.
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### ng-src
 | ||
| 
 | ||
|       <code-example hideCopy format="">
 | ||
|         <img ng-src="{{movie.imageurl}}">
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       The `ng-src` directive allows AngularJS to preprocess the `src` property so that it
 | ||
|       can replace the binding expression with the appropriate URL before the browser
 | ||
|       fetches from that URL.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Bind to the `src` property
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/app.component.html" region="src"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       Angular uses property binding; there is no built-in *src* directive.
 | ||
|       Place the `src` property in square brackets and set it to a quoted template expression.
 | ||
| 
 | ||
|       For more information on property binding, see the [Property binding](guide/template-syntax#property-binding)
 | ||
|       section of the [Template Syntax](guide/template-syntax) page.
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### ng-style
 | ||
| 
 | ||
|       <code-example hideCopy format="">
 | ||
|         <div ng-style="{color: colorPreference}">
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       In AngularJS, the `ng-style` directive sets a CSS style on an HTML element
 | ||
|       based on an expression. That expression is often a key-value control object with each
 | ||
|       key of the object defined as a CSS property, and each value defined as an expression
 | ||
|       that evaluates to a value appropriate for the style.
 | ||
| 
 | ||
|       In the example, the `color` style is set to the current value of the `colorPreference` variable.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### ngStyle
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/app.component.html" region="ngStyle"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       In Angular, the `ngStyle` directive works similarly. It sets a CSS style on an HTML element based on an expression.
 | ||
| 
 | ||
|       In the first example, the `color` style is set to the current value of the `colorPreference` variable.
 | ||
| 
 | ||
|       Angular also has **style binding**, which is good way to set a single style. This is shown in the second example.
 | ||
| 
 | ||
|       For more information on style binding, see the [Style binding](guide/template-syntax#style-binding) section of the
 | ||
|       [Template Syntax](guide/template-syntax) page.
 | ||
| 
 | ||
|       For more information on the `ngStyle` directive, see [NgStyle](guide/template-syntax#ngStyle)
 | ||
|       section of the [Template Syntax](guide/template-syntax) page.
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### ng-switch
 | ||
| 
 | ||
|       <code-example hideCopy format="">
 | ||
|         <div ng-switch="vm.favoriteHero &&
 | ||
|                         vm.checkMovieHero(vm.favoriteHero)">
 | ||
|             <div ng-switch-when="true">
 | ||
|               Excellent choice!
 | ||
|             </div>
 | ||
|             <div ng-switch-when="false">
 | ||
|               No movie, sorry!
 | ||
|             </div>
 | ||
|             <div ng-switch-default>
 | ||
|               Please enter your favorite hero.
 | ||
|             </div>
 | ||
|         </div>
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       In AngularJS, the `ng-switch` directive swaps the contents of
 | ||
|       an element by selecting one of the templates based on the current value of an expression.
 | ||
| 
 | ||
|       In this example, if `favoriteHero` is not set, the template displays "Please enter ...".
 | ||
|       If `favoriteHero` is set, it checks the movie hero by calling a controller method.
 | ||
|       If that method returns `true`, the template displays "Excellent choice!".
 | ||
|       If that methods returns `false`, the template displays "No movie, sorry!".
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### ngSwitch
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/movie-list.component.html" region="ngSwitch"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       In Angular, the `ngSwitch` directive works similarly.
 | ||
|       It displays an element whose `*ngSwitchCase` matches the current `ngSwitch` expression value.
 | ||
| 
 | ||
|       In this example, if `favoriteHero` is not set, the `ngSwitch` value is `null`
 | ||
|       and `*ngSwitchDefault` displays, "Please enter ...".
 | ||
|       If `favoriteHero` is set, the app checks the movie hero by calling a component method.
 | ||
|       If that method returns `true`, the app selects `*ngSwitchCase="true"` and displays: "Excellent choice!"
 | ||
|       If that methods returns `false`, the app selects `*ngSwitchCase="false"` and displays: "No movie, sorry!"
 | ||
| 
 | ||
|       The (*) before `ngSwitchCase` and `ngSwitchDefault` is required in this example.
 | ||
| 
 | ||
|       For more information, see [The NgSwitch directives](guide/template-syntax#ngSwitch)
 | ||
|       section of the [Template Syntax](guide/template-syntax) page.
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
| </table>
 | ||
| 
 | ||
| 
 | ||
| {@a filters-pipes}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| ## Filters/pipes
 | ||
| Angular **pipes** provide formatting and transformation for data in the template, similar to AngularJS **filters**.
 | ||
| Many of the built-in filters in AngularJS have corresponding pipes in Angular.
 | ||
| For more information on pipes, see [Pipes](guide/pipes).
 | ||
| 
 | ||
| 
 | ||
| <table width="100%">
 | ||
| 
 | ||
|   <col width="50%">
 | ||
| 
 | ||
|   </col>
 | ||
| 
 | ||
|   <col width="50%">
 | ||
| 
 | ||
|   </col>
 | ||
| 
 | ||
|   <tr>
 | ||
| 
 | ||
|     <th>
 | ||
|       AngularJS
 | ||
|     </th>
 | ||
| 
 | ||
|     <th>
 | ||
|       Angular
 | ||
|     </th>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### currency
 | ||
| 
 | ||
|       <code-example hideCopy>
 | ||
|         <td>{{movie.price | currency}}</td>
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       Formats a number as currency.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### currency
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/app.component.html" region="currency"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       The Angular `currency` pipe is similar although some of the parameters have changed.
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### date
 | ||
| 
 | ||
|       <code-example hideCopy>
 | ||
|         <td>{{movie.releaseDate | date}}</td>
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       Formats a date to a string based on the requested format.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### date
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/app.component.html" region="date"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       The Angular `date` pipe is similar.
 | ||
| 
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### filter
 | ||
| 
 | ||
|       <code-example hideCopy>
 | ||
|         <tr ng-repeat="movie in movieList | filter: {title:listFilter}">
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       Selects a subset of items from the defined collection, based on the filter criteria.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### none
 | ||
|       For performance reasons, no comparable pipe exists in Angular. Do all your filtering in the component. If you need the same filtering code in several templates, consider building a custom pipe.
 | ||
| 
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### json
 | ||
| 
 | ||
|       <code-example hideCopy>
 | ||
|         <pre>{{movie | json}}</pre>
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       Converts a JavaScript object into a JSON string. This is useful for debugging.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### json
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/app.component.html" region="json"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       The Angular `json` pipe does the same thing.
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### limitTo
 | ||
| 
 | ||
|       <code-example hideCopy>
 | ||
|         <tr ng-repeat="movie in movieList | limitTo:2:0">
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       Selects up to the first parameter (2) number of items from the collection
 | ||
|       starting (optionally) at the beginning index (0).
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### slice
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/app.component.html" region="slice"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       The `SlicePipe` does the same thing but the *order of the parameters is reversed*, in keeping
 | ||
|       with the JavaScript `Slice` method.
 | ||
|       The first parameter is the starting index; the second is the limit.
 | ||
|       As in AngularJS, coding this operation within the component instead could improve performance.
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### lowercase
 | ||
| 
 | ||
|       <code-example hideCopy>
 | ||
|         <td>{{movie.title | lowercase}}</td>
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       Converts the string to lowercase.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### lowercase
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/app.component.html" region="lowercase"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       The Angular `lowercase` pipe does the same thing.
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### number
 | ||
| 
 | ||
|       <code-example hideCopy>
 | ||
|         <td>{{movie.starRating | number}}</td>
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       Formats a number as text.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### number
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/app.component.html" region="number"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       The Angular `number` pipe is similar.
 | ||
|       It provides more functionality when defining
 | ||
|       the decimal places, as shown in the second example above.
 | ||
| 
 | ||
|       Angular also has a `percent` pipe, which formats a number as a local percentage
 | ||
|       as shown in the third example.
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### orderBy
 | ||
| 
 | ||
|       <code-example hideCopy>
 | ||
|         <tr ng-repeat="movie in movieList | orderBy : 'title'">
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       Displays the collection in the order specified by the expression.
 | ||
|       In this example, the movie title orders the `movieList`.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### none
 | ||
|       For performance reasons, no comparable pipe exists in Angular.
 | ||
|       Instead, use component code to order or sort results. If you need the same ordering or sorting code in several templates, consider building a custom pipe.
 | ||
| 
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
| </table>
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| {@a controllers-components}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| ## Modules/controllers/components
 | ||
| In both AngularJS and Angular, modules help you organize your application into cohesive blocks of functionality.
 | ||
| 
 | ||
| In AngularJS, you write the code that provides the model and the methods for the view in a **controller**.
 | ||
| In Angular, you build a **component**.
 | ||
| 
 | ||
| Because much AngularJS code is in JavaScript, JavaScript code is shown in the AngularJS column.
 | ||
| The Angular code is shown using TypeScript.
 | ||
| 
 | ||
| 
 | ||
| <table width="100%">
 | ||
| 
 | ||
|   <col width="50%">
 | ||
| 
 | ||
|   </col>
 | ||
| 
 | ||
|   <col width="50%">
 | ||
| 
 | ||
|   </col>
 | ||
| 
 | ||
|   <tr>
 | ||
| 
 | ||
|     <th>
 | ||
|       AngularJS
 | ||
|     </th>
 | ||
| 
 | ||
|     <th>
 | ||
|       Angular
 | ||
|     </th>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### IIFE
 | ||
| 
 | ||
|       <code-example hideCopy>
 | ||
|         (function () {
 | ||
|           ...
 | ||
|         }());
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       In AngularJS, an immediately invoked function expression (or IIFE) around controller code
 | ||
|       keeps it out of the global namespace.
 | ||
| 
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### none
 | ||
|       This is a nonissue in Angular because ES 2015 modules
 | ||
|       handle the namespacing for you.
 | ||
| 
 | ||
|       For more information on modules, see the [Modules](guide/architecture#modules) section of the
 | ||
|       [Architecture Overview](guide/architecture).
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Angular modules
 | ||
| 
 | ||
|       <code-example hideCopy>
 | ||
|         angular.module("movieHunter", ["ngRoute"]);
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       In AngularJS, an Angular module keeps track of controllers, services, and other code.
 | ||
|       The second argument defines the list of other modules that this module depends upon.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### NgModules
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/app.module.1.ts"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       NgModules, defined with the `NgModule` decorator, serve the same purpose:
 | ||
| 
 | ||
|       * `imports`: specifies the list of other modules that this module depends upon
 | ||
|       * `declaration`: keeps track of your components, pipes, and directives.
 | ||
| 
 | ||
|       For more information on modules, see [NgModules](guide/ngmodules).
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Controller registration
 | ||
| 
 | ||
|       <code-example hideCopy>
 | ||
|         angular
 | ||
|           .module("movieHunter")
 | ||
|           .controller("MovieListCtrl",
 | ||
|                       ["movieService",
 | ||
|                        MovieListCtrl]);
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       AngularJS has code in each controller that looks up an appropriate Angular module
 | ||
|       and registers the controller with that module.
 | ||
| 
 | ||
|       The first argument is the controller name. The second argument defines the string names of
 | ||
|       all dependencies injected into this controller, and a reference to the controller function.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Component decorator
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/movie-list.component.ts" region="component"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       Angular adds a decorator to the component class to provide any required metadata.
 | ||
|       The `@Component` decorator declares that the class is a component and provides metadata about
 | ||
|       that component such as its selector (or tag) and its template.
 | ||
| 
 | ||
|       This is how you associate a template with logic, which is defined in the component class.
 | ||
| 
 | ||
|       For more information, see the [Components](guide/architecture#components)
 | ||
|       section of the [Architecture Overview](guide/architecture) page.
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Controller function
 | ||
| 
 | ||
|       <code-example hideCopy>
 | ||
|         function MovieListCtrl(movieService) {
 | ||
|         }
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       In AngularJS, you write the code for the model and methods in a controller function.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Component class
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/movie-list.component.ts" region="class"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       In Angular, you create a component class to contain the data model and control methods. Use the TypeScript <code>export</code> keyword to export the class so that the functionality can be imported into NgModules.
 | ||
| 
 | ||
|       For more information, see the [Components](guide/architecture#components)
 | ||
|       section of the [Architecture Overview](guide/architecture) page.
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Dependency injection
 | ||
| 
 | ||
|       <code-example hideCopy>
 | ||
|         MovieListCtrl.$inject = ['MovieService'];
 | ||
|         function MovieListCtrl(movieService) {
 | ||
|         }
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       In AngularJS, you pass in any dependencies as controller function arguments.
 | ||
|       This example injects a `MovieService`.
 | ||
| 
 | ||
|       To guard against minification problems, tell Angular explicitly
 | ||
|       that it should inject an instance of the `MovieService` in the first parameter.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Dependency injection
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/movie-list.component.ts" region="di"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       In Angular, you pass in dependencies as arguments to the component class constructor.
 | ||
|       This example injects a `MovieService`.
 | ||
|       The first parameter's TypeScript type tells Angular what to inject, even after minification.
 | ||
| 
 | ||
|       For more information, see the [Dependency injection](guide/architecture#dependency-injection)
 | ||
|       section of the [Architecture Overview](guide/architecture).
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
| </table>
 | ||
| 
 | ||
| {@a style-sheets}
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| ## Style sheets
 | ||
| Style sheets give your application a nice look.
 | ||
| In AngularJS, you specify the style sheets for your entire application.
 | ||
| As the application grows over time, the styles for the many parts of the application
 | ||
| merge, which can cause unexpected results.
 | ||
| In Angular, you can still define style sheets for your entire application. But now you can
 | ||
| also encapsulate a style sheet within a specific component.
 | ||
| 
 | ||
| <table width="100%">
 | ||
| 
 | ||
|   <col width="50%">
 | ||
| 
 | ||
|   </col>
 | ||
| 
 | ||
|   <col width="50%">
 | ||
| 
 | ||
|   </col>
 | ||
| 
 | ||
|   <tr>
 | ||
| 
 | ||
|     <th>
 | ||
|       AngularJS
 | ||
|     </th>
 | ||
| 
 | ||
|     <th>
 | ||
|       Angular
 | ||
|     </th>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
|   <tr style=top>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
|       ### Link tag
 | ||
| 
 | ||
|       <code-example hideCopy>
 | ||
|         <link href="styles.css" rel="stylesheet" />
 | ||
|       </code-example>
 | ||
| 
 | ||
| 
 | ||
|       AngularJS, uses a `link` tag in the head section of the `index.html` file
 | ||
|       to define the styles for the application.
 | ||
|     </td>
 | ||
| 
 | ||
|     <td>
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|       ### Styles configuration
 | ||
|       <code-example hideCopy path="ajs-quick-reference/.angular-cli.1.json" region="styles"></code-example>
 | ||
| 
 | ||
|       With the Angular CLI, you can configure your global styles in the `angular.json` file.
 | ||
|       You can rename the extension to `.scss` to use sass.
 | ||
| 
 | ||
|       ### StyleUrls
 | ||
|       In Angular, you can use the `styles` or `styleUrls` property of the `@Component` metadata to define
 | ||
|       a style sheet for a particular component.
 | ||
| 
 | ||
|       <code-example hideCopy path="ajs-quick-reference/src/app/movie-list.component.ts" region="style-url"></code-example>
 | ||
| 
 | ||
| 
 | ||
|       This allows you to set appropriate styles for individual components that won’t leak into
 | ||
|       other parts of the application.
 | ||
|     </td>
 | ||
| 
 | ||
|   </tr>
 | ||
| 
 | ||
| </table>
 | ||
| 
 |