Introduction License Why Angular 2? EcmaScript 6 and TypeScript Features ES6 Classes Refresher on 'this' Arrow Functions Template Strings Inheritance Constants and Block Scoped Variables ...spread and ...rest Destructuring Modules TypeScript Getting Started With TypeScript Working With tsc Typings Linting TypeScript Features TypeScript Classes Interfaces Shapes Type Inference Type Keyword Decorators Property Decorators Class Decorators Parameter Decorators The JavaScript Toolchain Source Control: git The Command Line Command Line JavaScript: NodeJS Back-End Code Sharing and Distribution: npm Module Loading, Bundling and Build Tasks: Webpack Chrome Bootstrapping an Angular 2 Application Understanding the File Structure Bootstrapping Providers Components in Angular 2 Creating Components Application Structure with Components Passing Data into a Component Responding to Component Events Using Two-Way Data Binding Accessing Child Components from Template Projection Structuring Applications with Components Using Other Components Directives Attribute Directives NgStyle Directive NgClass Directive Structural Directives NgIf Directive NgFor Directive NgSwitch Directives Using Multiple Structural Directives Advanced Components Component Lifecycle Accessing Other Components View Encapsulation ElementRef Observables Using Observables Error Handling Disposing Subscriptions and Releasing Resources Observables vs Promises Using Observables From Other Sources Observables Array Operations Cold vs Hot Observables Summary Angular 2 Dependency Injection What is DI? DI Framework Angular 2's DI @Inject() and @Injectable Injection Beyond Classes The Injector Tree Http Making Requests Catching Rejections Catch and Release Cancel a Request Retry Search with flatmap Requests as Promises Change Detection Change Detection Strategies in Angular 1 vs Angular 2 How Change Detection Works Change Detector Classes Change Detection Strategy: OnPush Enforcing Immutability Additional Resources Zone.js Advanced Angular Directives Creating an Attribute Directive Listening to an Element Host Setting Properties in a Directive Creating a Structural Directive View Containers and Embedded Views Providing Context Variables to Directives AoT AoT limitations AoT Configuration Immutable.js What is Immutability? The Case for Immutability JavaScript Solutions Object.assign Object.freeze Immutable.js Basics Immutable.Map Map.merge Nested Objects Deleting Keys Maps are Iterable Immutable.List Performance and Transient Changes Official Documentation Pipes Using Pipes Custom Pipes Stateful Pipes Forms Getting Started Template-Driven Forms Nesting Form Data Using Template Model Binding Validating Template-Driven Forms FormBuilder FormBuilder Basics Validating FormBuilder Forms FormBuilder Custom Validation Visual Cues for Users Modules What is an Angular 2 Module? Adding Components, Pipes and Services to a Module Creating a Feature Module Directive Duplications Lazy Loading a Module Lazy Loading and the Dependency Injection Tree Shared Modules and Dependency Injection Sharing the Same Dependency Injection Tree Routing Why Routing? Configuring Routes Redirecting the Router to Another Route Defining Links Between Routes Dynamically Adding Route Components Using Route Parameters Defining Child Routes Controlling Access to or from a Route Passing Optional Parameters to a Route Using Auxiliary Routes Redux and Ngrx Review of Reducers and Pure Functions Reducers as State Management Redux Actions Configuring your Application to use Redux Using Redux with Components Redux and Component Architecture Getting More From Redux and Ngrx TDD Testing The Testing Toolchain Test Setup Filename Conventions Karma Configuration TestBed Configuration (Optional) Typings Executing Test Scripts Simple Test Using Chai Testing Components Verifying Methods and Properties Injecting Dependencies and DOM Changes Overriding Components for Testing Testing Asynchronous Actions Refactoring Hard-to-Test Code Testing Services Testing Strategies for Services Testing HTTP Requests Using MockBackend Alternative Mocking Strategy Testing JSONP and XHR Back-Ends Executing Tests Asynchronously Testing Redux Testing Simple Actions Testing Complex Actions Testing Reducers Afterthoughts Migrating Angular 1.x Projects to Angular 2 Migration Prep Upgrading To Angular 1.3+ Style Using Webpack Migrating To TypeScript Choosing an Upgrade Path Avoiding Total Conversion Using ng-metadata (Angular 1.x Using 2 Style) Bootstrapping ng-metadata Components and Services Using ng-upgrade (Angular 1.x Coexisting With Angular 2) Order of Operations Replacing Services with TypeScript Classes Bootstrapping ng-upgrade Downgrading Components Upgrading Components Projecting Angular 1 Content into Angular 2 Components Transcluding Angular 2 Components into Angular 1 Directives Injecting Across Frameworks Project Setup Webpack Installation and Usage Loaders Plugins Summary NPM Scripts Integration Angular CLI Setup Creating a New App Serving the App Creating Components Creating Routes Creating Other Things Testing Linting CLI Command Overview Adding Third Party Libraries Integrating an Existing App Accessibility in Angular 2 Why Make my Application Accessible? Key Concerns of Accessible Web Applications Semantic Markup Keyboard Accessibility Visual Assistance Testing for Accessibility Is my Application Readable? Is my Application Predictable? Is my Application Navigable? Testing with Screen Readers Additional Resources Internationalization in Angular 2 What is the process like and how is involved? Marking text in our templates Extracting translation text using the Angular CLI How to import the completed translation files Using the AoT Compiler Using the JiT Compiler Glossary Other Resources