SlideShare ist ein Scribd-Unternehmen logo
Angular 2.0
Manfred Steyer
ManfredSteyer
Über mich …
Manfred Steyer
Trainer & Berater
Fokus: Angular
Page  2
Ziel
Angular 2.0 und zugrundeliegende Konzepte
anhand eines Beispielprojektes kennen lernen
Page  5
Inhalt
Motivation
Angular 2 und Datenbindung
Services und DI
Pipes
Change-Tracking
Komponenten
Forms-Handling und Validierung
Routing
MOTIVATION
Page  8
Plattformen und Usability
HTML + JavaScript
Single Page Application
High-Level Architektur
Page  10
Services
HTML/
JavaScript-Client
HTTP
Single Page Application (SPA)
Page  15
HTML + JavaScript => Komplexität
Page  16
HTML + JavaScript + jQuery => Komplexität
Page  17
Frameworks machen SPA beherrschbar
AngularJS
Page  19
Community Verbreitung
Eco-
System
Google Trends (Februar 2016)
Page  24
Job Trends (Indeed.com, Februar 2016)
Page  26
angular-connect, Herbst 2015, London
Folie 27
angular-connect, Herbst 2015, London
Folie 28
ANGULAR 2
Page  42
Was ist Angular 2
 Neuimplementierung
 Performance
 Komponenten
 TypeScript/ ES 6 (ES 5 möglich)
 Kompilierung nach ES 5
 Modularisierung
 Flexibles Rendering (auch: Web-Worker, Server)
 Spielt besser mit anderen Bibliotheken zusammen
Page  43
Stand der Dinge
 BETA seit Dezember 2015
 Kern stabil!
 RC: Für Mai 2016 geplant
 Moving-Parts jenseits des Kerns
 Angular-2-Portierungen
 AdWords (Mios LOC, 100s Devs)
 Green Tea (Mios LOC, 100s Devs)
Page  44
Component Controller
Page  45
@Component({
selector: 'flug-suchen',
templateUrl: 'flug-suchen.html'
})
export class FlugSuchen {
von: string;
nach: string;
fluege: Array<Flug>;
constructor(flugService: FlugService) { }
flugSuchen() { [...] }
selectFlug(flug) { [...] }
}
Bindings
Page  46
<input [(ngModel)]="von">
[…]
<table [hidden]="fluege.length == 0">
<tr *ngFor="#flug of fluege">
<td>{{flug.id}}</td>
<td>{{flug.datum}}</td>
<td>{{flug.von}}</td>
<td>{{flug.zu}}</td>
<td><a href="#" (click)="selectFlight(flug)">Select</a></td>
</tr>
</table>
View
Page  47
<input bindon-ngModel="von">
[…]
<table bind-hidden="fluege.length == 0">
<tr template="ngFor: var flug of fluege">
<td>{{flug.id}}</td>
<td>{{flug.datum}}</td>
<td>{{flug.abflugOrt}}</td>
<td>{{flug.zielOrt}}</td>
<td><a href="#" on-click="selectFlug(flug)">Auswählen</a></td>
</tr>
</table>
DEMO: ERSTE SCHRITTE
Page  50
DATENBINDUNG NÄHER
BETRACHTET
Page  83
Architektur-Ziele von Angular 2
Page  84
Performance Komponenten
Vorhersagbarkeit
Data-Binding in Angular 1.x
Page  85
Model Model Directive
Komponenten-Baum in Angular 2
Page  86
Komponente für App
Komponente (z. B. Liste)
Komponente
(z. B. Eintrag)
Komponente
(z. B. Eintrag)
Regeln für Property-Bindings
 Eine Komponente hängt nur von ihren eigenen Daten
(und indirekt von denen des Parents) ab
 Eine Komponente hängt nicht von
Daten ihrer Kinder ab!
 Abhängigkeits-Graph ist ein Baum
 Angular benötigt nur einen Digest um Baum mit GUI
abzugleichen
Page  88
Property-Binding
Page  89
model
item item
{{ item.title }} {{ item.title }}
[http://victorsavkin.com/post/110170125256/change-detection-in-angular-2]
Weitere Performance-Verbesserungen
Page  91
Immutable
Data
Observables
Event-Bindings (One-Way, Bottom/Up)
Page  93
{{ item.title }} {{ item.title }}
Event-Handler
Event-Handler
Event-Bindings (One-Way, Bottom/Up)
Kein Digest um Events zu versenden
Aber: Events können Daten ändern 
Property Binding
Page  94
Property- und Event-Bindings
Page  96
Property-Binding
ausführen
Event-Handler
ausführen
Ereignis tritt ein
App ist bereit
Alle Handler ausgeführt
Properties gebunden
View
Page  99
<table [hidden]="flights.length == 0">
<tr *ngFor="#flight of flights">
<td>{{flight.id}}</td>
<td>{{flight.date}}</td>
<td>{{flight.from}}</td>
<td>{{flight.to}}</td>
<td><a href="#" (click)="selectFlight(flight)">Select</a></td>
</tr>
</table>
<td [text-content]="flight.id"></td>
Recap
Property-Binding: One-Way; Top/Down
Event-Binding: One-Way; Bottom/Up
Two-Way-Binding?
Two-Way = Property-Binding + Event-Binding
Page  101
Property- und Event-Bindings
kombinieren
Page  102
<input [ngModel]="von"
(ngModelChange)="updateVon($event)">
updateVon(newValue) {
this.von = newValue;
}
Property- und Event-Bindings
kombinieren
Page  103
<input [ngModel]="von"
(ngModelChange)="von = $event">
Syntax-Zucker für 2-Way-Binding
Page  104
<input [(ngModel)]="von">
<input bindon-ngModel="von">
KOMPONENTEN MIT
BINDINGS
Page  108
Beispiel: flug-card
Page  110
Beispiel: flug-card in flug-suchen.html
Page  112
<div *ngFor="#f of fluege">
<flug-card [item]="f"
[selectedItem]="selectedFlug"
(selectedItemChange)="selectedFlug = $event">
</flug-card>
</div>
Beispiel: flug-card
@Component({
selector: 'flug-card',
templateUrl: 'app/flug-card/flug-card.html',
changeDetection: ChangeDetectionStrategy.OnPush
})
export class FlugCard {
@Input('item') flug;
@Input() selectedItem;
@Output() selectedItemChange = new EventEmitter();
select() {
this.selectedItemChange.next(this.flug);
}
}
Template
<div style="padding:20px;"
[ngStyle]="{'background-color':
(selectedItem == flug) ?
'orange' : 'lightsteelblue' }" >
<h2>{{flug.abflugort}} - {{flug.zielort}}</h2>
<p>Flugnr. #{{flug.id}}</p>
<p>Datum: {{flug.datum.substr(0,10)}}</p>
<p>
<input
type="button"
value="Auswählen"
class="btn btn-default"
(click)="select()" />
</p>
</div>
Nutzung einer Komponente
Page  115
@Component({
selector: 'flug-suchen',
templateUrl: 'app/flug-suchen/flug-suchen.html',
directives: [FlugCard],
})
export class FlugSuchen {
[…]
}
Nutzung einer Komponente (global)
Page  116
var services = [
provide(PLATFORM_DIRECTIVES,
{useValue: FlugCard, multi: true})
];
bootstrap(App, services);
DEMO
Page  117
FORMS HANDLING
Page  119
Ansätze in Angular 2
• ng-model
• Wie in AngularJS 1.x
• Angular erzeugt „Forms-Controller“
Deklerativ
• Anwendung erzeugt „Forms-
Controller“
• Mehr Kontrolle
Imperativ
• Angular generiert Formular für
Datenmodell
• An Community übergeben
Daten-
getrieben
Deklerative Formulare
Page  121
export class FlugSuchen {
von;
nach;
constructor(flugService: FlugService) {
von = 'Graz';
nach = 'Hamburg';
}
}
View
Page  122
<form #f="ngForm">
<input type="text" ngControl="von"
[(ngModel)]="von" required>
[…]
</form>
FormDirective
valid, dirty, …
Control
valid, dirty
controls
{ }
von
View
Page  123
<form #f="ngForm">
<input type="text" ngControl="von"
[(ngModel)]="von" required>
<div *ngIf="!f?.controls?.von?.valid">
…Error…
</div>
<div
*ngIf="f?.controls?.von?.hasError('required')">
…Error…
</div>
[…]
</form>
FormDirective
valid, dirty, …
Control
valid, dirty
controls
{ }
von
DEMO
Page  125
Imperative Formulare
export class FlugSuchen {
filter: ControlGroup;
constructor(flightService: FlightService, fb: FormBuilder) {
[…]
this.filter = fb.group({
von: ['Graz', Validators.required],
nach: ['Hamburg', Validators.required]
});
[…]
}
searchFlights() {
var filter = this.filter.value;
[…]
}
}
Imperative Formulare
Page  127
<form [ngFormModel]="filter">
<input id="from" ngControl="von" type="text">
<div *ngIf="!filter.controls.von.valid">…Error…</div>
[…]
</form>
DEMO
Page  128

Weitere ähnliche Inhalte

PDF
Wiederverwendbare Komponenten mit Angular 2.0 – Deep Dive
PDF
Angular 2.0: Architektur und Konzepte für moderne JavaScript-Anwendungen
PDF
Der neue Component Router für Angular 2
PDF
Angular 2 Workshop Oktober 2015
PDF
Angular 2: Die Ideen hinter Datenbindung und Formularen im Detail betrachtet
PDF
Angular 2: Neuerungen und Migration
PDF
Offlinefähige Browseranwendungen: Progressive Web-Apps mit Angular 2
PDF
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)
Wiederverwendbare Komponenten mit Angular 2.0 – Deep Dive
Angular 2.0: Architektur und Konzepte für moderne JavaScript-Anwendungen
Der neue Component Router für Angular 2
Angular 2 Workshop Oktober 2015
Angular 2: Die Ideen hinter Datenbindung und Formularen im Detail betrachtet
Angular 2: Neuerungen und Migration
Offlinefähige Browseranwendungen: Progressive Web-Apps mit Angular 2
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)

Was ist angesagt? (12)

PDF
Single Page Applications neu gedacht: Redux in Angular 2 mit @ngrx/store
PDF
Angular 2: Custom Components
PDF
Angular 2 Components
PDF
Schnelleinstieg in Angular
PDF
.NET Summit 2016 München: Angular 2 mit TypeScript
PDF
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
PDF
Moderne Web-Anwendungen mit Angular 2
PDF
Component Based UI mit Angular
PDF
Datenbasierte Services mit MVC Core 1 und EF Core 1
PPTX
Workshop Vue js
PDF
AngularJS
PDF
Web APIs mit ASP.NET Core 1
Single Page Applications neu gedacht: Redux in Angular 2 mit @ngrx/store
Angular 2: Custom Components
Angular 2 Components
Schnelleinstieg in Angular
.NET Summit 2016 München: Angular 2 mit TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
Moderne Web-Anwendungen mit Angular 2
Component Based UI mit Angular
Datenbasierte Services mit MVC Core 1 und EF Core 1
Workshop Vue js
AngularJS
Web APIs mit ASP.NET Core 1
Anzeige

Andere mochten auch (16)

ODP
Introduction to Angular 2
PDF
Getting Started with Angular 2
PDF
Angular 2 Überblick Oktober 2015
PDF
Modern angular 04_component_router
PDF
WEIDMULLER marker TERMINAL BLOCK - mail@akbartrading.com
PDF
Datenbindung und Performance in Angular 2
PDF
Kalsel
PPTX
PDF
Angular 2 - Core Concepts
PDF
reveal.js 3.0.0
KEY
GUI-Mockups in der Softwareentwicklung
PDF
Building Universal Applications with Angular 2
PDF
Build Features, Not Apps
PDF
2015 Upload Campaigns Calendar - SlideShare
PPTX
What to Upload to SlideShare
PDF
Getting Started With SlideShare
Introduction to Angular 2
Getting Started with Angular 2
Angular 2 Überblick Oktober 2015
Modern angular 04_component_router
WEIDMULLER marker TERMINAL BLOCK - mail@akbartrading.com
Datenbindung und Performance in Angular 2
Kalsel
Angular 2 - Core Concepts
reveal.js 3.0.0
GUI-Mockups in der Softwareentwicklung
Building Universal Applications with Angular 2
Build Features, Not Apps
2015 Upload Campaigns Calendar - SlideShare
What to Upload to SlideShare
Getting Started With SlideShare
Anzeige

Ähnlich wie Angular 2 Slides (20)

PDF
Angular 2 Workshop November 2015 von der w-jax 2015
PDF
Was bringt Angular 2?
PDF
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
PDF
Aspnet Core Cloudready Enterprise Web Application Development Mugilan T S Rag...
PPTX
Mobile Apps mit AngularJS und Plain Old HTML5 (Linuxtag 2013, Berlin)
PDF
Moderne Web-Anwendungen mit Angular 2
PDF
Große Applikationen mit AngularJS
PDF
Domain Driven Design in Rails
PDF
ArcGIS Enterprise Content Migration mit FME
PDF
MEAN SCS in der Cloud
PDF
Net@night asp.net mvc
PDF
.NET Summit 2016 in München: ASP.NET Core 1
PDF
Automatisierung von Client-seitigen Web-Performance-Optimierungen
PDF
Forms and Reports 12c - Processes and Automation in Development and Operations
PPTX
2007 - Basta!: Nach soa kommt soc
PPT
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
PDF
Zeitnahe Reaktion auf Verordnungsänderungen mit Feature Toggles
PPTX
Team Foundation Server
PDF
20150923 ausführbare spezifikation_automotiveforum
PDF
Wieviel Client braucht das Web?
Angular 2 Workshop November 2015 von der w-jax 2015
Was bringt Angular 2?
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
Aspnet Core Cloudready Enterprise Web Application Development Mugilan T S Rag...
Mobile Apps mit AngularJS und Plain Old HTML5 (Linuxtag 2013, Berlin)
Moderne Web-Anwendungen mit Angular 2
Große Applikationen mit AngularJS
Domain Driven Design in Rails
ArcGIS Enterprise Content Migration mit FME
MEAN SCS in der Cloud
Net@night asp.net mvc
.NET Summit 2016 in München: ASP.NET Core 1
Automatisierung von Client-seitigen Web-Performance-Optimierungen
Forms and Reports 12c - Processes and Automation in Development and Operations
2007 - Basta!: Nach soa kommt soc
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
Zeitnahe Reaktion auf Verordnungsänderungen mit Feature Toggles
Team Foundation Server
20150923 ausführbare spezifikation_automotiveforum
Wieviel Client braucht das Web?

Mehr von Manfred Steyer (19)

PDF
Datengetriebene Web APIs mit Entity Framework
PDF
Angular 2 Upgrade: Migration von AngularJS 1.x zu 2.0
PDF
The newst new Router for Angular 2 ("Version 3")
PDF
Databinding and Performance-Tuning in Angular 2
PDF
Modern authentication solutions in Angular 2 with OAuth 2.0 and OpenId Connect
PDF
Progressive web apps with Angular 2
PDF
Der neueste neue Router (Version 3) für Angular 2
PDF
PDF
ASP.NET Core 1 for MVC- and WebAPI-Devs
PDF
EF Core 1: News features and changes
PDF
Angular 2: Migration - SSD 2016 London
PDF
Angular 2 - SSD 2016 London
PDF
ASP.NET Web API Deep Dive - SSD 2016 London
PDF
Web APIs mit ASP.NET MVC Core 1
PDF
Angular 2: Routing
PDF
Datenbasierte Services mit Entity Framework und Co.
PDF
Datenbasierte Services mit Entity Framework und Co.
PDF
Komponenten mit Angular 2, Deep Dive
PDF
Web APIs mit ASP.NET MVC Core 1
Datengetriebene Web APIs mit Entity Framework
Angular 2 Upgrade: Migration von AngularJS 1.x zu 2.0
The newst new Router for Angular 2 ("Version 3")
Databinding and Performance-Tuning in Angular 2
Modern authentication solutions in Angular 2 with OAuth 2.0 and OpenId Connect
Progressive web apps with Angular 2
Der neueste neue Router (Version 3) für Angular 2
ASP.NET Core 1 for MVC- and WebAPI-Devs
EF Core 1: News features and changes
Angular 2: Migration - SSD 2016 London
Angular 2 - SSD 2016 London
ASP.NET Web API Deep Dive - SSD 2016 London
Web APIs mit ASP.NET MVC Core 1
Angular 2: Routing
Datenbasierte Services mit Entity Framework und Co.
Datenbasierte Services mit Entity Framework und Co.
Komponenten mit Angular 2, Deep Dive
Web APIs mit ASP.NET MVC Core 1

Angular 2 Slides