Angular 2
for angular 1.x developers

Architecture Overview
- Architecutre main characteristics
- Modularity
- Using Web standards
- Components based
- Dependency Injection
- Streamed communication
- Unidirectional dataflow
- Works natively with TypeScript
- Provides a complete "ecosystem" (routing, testing, I18n, etc.) for building robust Web applications
Modularity
- Angular 2 is built as a modular framework
- UI rendering is separate from framework core
- Core is also split into different modules that can be used separately and on demand
- Communication is based on data streams using separate (RxJS) framework/module
- Angular 2 modularity allows the framework to run in different ways/platforms:
- Browser (ui thread)
- Web-worker thread
- Server (server side rendering)
- Native apps (ui) - e.g NativeScript

Web Standards
- Angular 2 uses as much of the latest/existing Web standards
- Support Web Components / Shadow DOM for style encapsulation
- Support for Web workers
- Using native DOM properties and events

Building Blocks - Components
- Angular 2 applications are built from Components
- Components are a combinaton of a view (template) and behaviour
- The main application component is the Root Component
- Each component can have Child Components
- The resulting Angular 2 application is a tree of components

Building Blocks - Directives
- In Angular 2, Directives are Components without a view
- Directives are used to attach behaviour to DOM elements
- Each Component is actually an extended Directive (with view)
- Directives can be used inside the Component's view (template) as needed
Building Blocks - Services / Dependency Injection
- Angualr 2 uses Services (providers) for business logic (no view)
- Angular 2 uses dependency injection to inject Services (providers) into componets
- Dependency injection in Angular 2 is hierarchical, resolving from child to parent
Building Blocks - Summary

Component Router
- Angular 2 introduces a new component router
- The component router is similar in concept to other SPA based routers (known from Angular 1)
- Angular 2 router is component based, controlling navigation and display of application components
- Angular 2 component router is implemented as separate module
Change Detection
- Angular 2 change detection
- Detecting changes that required view updates
- View updates changes are triggered by async operations (events, http requests, timer, user intervention)
- In Angular 2, all browser async operations are "monkey-patched" for hooks using zone.js
- Zone.js implements an exectuion context that enables hooks on the executed context (start, end, error, async operations, etc.)
- Angular 2 uses an extended zone.js version called ngZone
Change Detection
- Angular 2 change detection
- Change detection is done at Component level (for each component's template bindings)
- Change detection is executed from Root Component to all childs. (by default on all childs and on every change detected by ngZone)
- Change detection strategy for each component can be controlled/skipped
- Change detection is predicatable as it runs on a directed graph of components tree
- Change detection is significantly
more performant and predictable
(no "digest" loop)

Communication - Observavles (RxJS)
- Angular 2 uses data streams for different types of communication
- Stream is an async continuous data flow mechanism
- Angular 2 uses the RxJS framework, using Observable objects as streams
- Angular 2 uses RxJS for
- Server communications (HTTP)
- Component communication
- Forms - user inputs data flow
- Creating communication/custom data flows

Communication - Observavles (RxJS)
- Observables (RxJS) provide extended control over data flow
- Include built-in operators like: map, merge, filter, debounce, etc.
- Observables can be used instead of Promises (where appropriate)

Architecture stack
Angular 2 Overview
By Shaul Ben-Yossef
Angular 2 Overview
- 1,561