SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
1
Angular 2.0: Architektur und Konzepte für
moderne JavaScript-Anwendungen
Manfred Steyer
Aktuelles Buch
Folie 2
O'Reilly:
AngularJS: Moderne
Webanwendungen und Single Page
Applications mit JavaScript
Steyer, Softic
2
Ziel
Überblick zu Angular 2 gewinnen
Migrationspfade
Page  3
Inhalt
Warum Angular ?
Überblick zu Angular 2
Datenbindung näher betrachtet
DEMO
Migrationspfade
Fazit
Page  4
3
WARUM ANGULAR?
Page  5
Plattformen und Usability
HTML + JavaScript
4
High-Level Architektur
Page  7
Services
HTML/
JavaScript-Client
HTTP
Single Page Application (SPA)
Page  8
HTML + JavaScript => Komplexität
5
Page  9
HTML + JavaScript + jQuery => Komplexität
Page  10
Frameworks machen SPA beherrschbar
6
Typische Möglichkeiten
Page  11
Abstraktion MV* Datenbindung
Testing Komponenten Routing
Validierung
Community (Februar 2016)
Page  13
AngularJS EmberJS Durandal Aurelia
Stars 46.168 15.615 1.680 5.220
Forks 21.632 3.364 379 231
Contributers 1.393 551 69 21
7
Google Trends (Februar 2016)
Page  14
Job Trends (Indeed.com, Februar 2016)
Page  16
8
HERAUSFORDERUNGEN IN
ANGULARJS 1.X
Page  17
Herausforderungen in AngularJS 1.x
Page  18
Performance Nachvollziehbarkeit Änderungsverfolgung
Use-Case:
Anwendungen
Zusammenspiel mit
anderen Bibliotheken
9
ANGULAR 2
Page  19
Was ist Angular 2 ?
 Neuimplementierung
 Performance
 Komponenten (Web Components)
 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  20
10
Stand der Dinge
BETA seit Dezember 2015
Kern laut Produkt-Team stabil
Moving-Parts jenseits des Kerns
Kommt bereits bei Google zum Einsatz
 Green Tea, CMS, 100s Devs, 1.000.000s LOC
 Google AdWords, 100s Devs, 1.000.000s LOC
Page  21
Component Controller
Page  22
@Component({
selector: 'flug-suchen'
})
@View({
templateUrl: 'flug-suchen.html',
directives: [NgFor, NgIf]
})
export class FlugSuchen {
von: string;
nach: string;
fluege: Array<Flug>;
constructor(flugService: FlugService) { }
flugSuchen() { [...] }
selectFlug(flug) { [...] }
}
11
View
Page  23
<input [(ngModel)]="von">
[…]
<table [hidden]="fluege.length == 0">
<tr *ngFor="#flug of fluege">
<td>{{flug.id}}</td>
<td>{{flug.datum}}</td>
<td>{{flug.abflugOrt}}</td>
<td>{{flug.zielOrt}}</td>
<td><a href="#" (click)="selectFlug(flug)">Auswählen</a></td>
</tr>
</table>
View
Page  24
<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>
12
DATENBINDUNG NÄHER
BETRACHTET
Page  25
Data-Binding in Angular 1.x
Page  26
Model Model Directive
13
Komponenten-Baum in Angular 2
Page  27
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  28
14
Property-Binding
Page  29
model
item item
{{ item.title }} {{ item.title }}
[http://victorsavkin.com/post/110170125256/change-detection-in-angular-2]
Weitere Performance-Verbesserungen
Page  30
Immutable
Data
Observables
15
Immutable Objects and Performance
Page  31
oldObject == newObject

oldObject.a == newObject.a
&& oldObject.b == newObject.b …
Event-Bindings (One-Way, Bottom/Up)
Page  32
{{ item.title }} {{ item.title }}
Event-Handler
Event-Handler
16
Event-Bindings (One-Way, Bottom/Up)
Kein Digest um Events zu versenden
Aber: Events können Daten ändern 
Property Binding
Page  33
Property- und Event-Bindings
Page  34
Property-Binding
ausführen
Event-Handler
ausführen
Ereignis tritt ein
App ist bereit
Alle Handler ausgeführt
Properties gebunden
17
View
Page  35
<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  36
18
Syntax-Zucker für 2-Way-Binding
Page  39
<input [(ngModel)]="von">
<input bindon-ngModel="von">
DEMO: ANGULAR 2 MIT
TYPESCRIPT UND @CODE
Page  40
19
MIGRATION
Page  41
Migration
Page  43
Angular
1.x
Angular
2
20
Möglichkeiten
 Component Router: Parallelbetrieb
 NgUpgrade: Angular 2 und Angular 1.x mixen
 Angular 1.5: Komponenten in Angular 1
 NgForward: AngularJS 1.x im Angular-2-Stil
 Sinnvoll: Vorbereitung durch Einsatz von modernen
AngularJS 1.x-Code vorbereiten: EcmaScript 6,
TypeScript, Dekoratoren, Controller-As
Page  44
[https://github.com/angular/ngUpgrade]
Ein Blick auf ngUpgrade
Page  45
FlugCard
FlugSvc
PassagierCard
PassagierSvc
FlugSuchen PassagierSuchen
Anwendung1
1
1
1
2
2
2
21
Fazit
 Angular: SPA-Framework mit großer Verbreitung
 Angular 2 ist Neuimplementierung
 Fokus: Komponenten, Performance, Modern Web
 Komponenten: Wartbarkeit, Wiederverwendbarkeit
 TypeScript, ES6: Wartbarkeit
 Datenbindungskonzept: Performance
 DI: Testbarkeit und Austauschbarkeit
 Flexibles Rendering
 Parallelbetrieb von Version 1 und 2
manfred.steyer@SOFTWAREarchitekt.at
SOFTWAREarchitekt.at
ManfredSteyer
Kontakt

Weitere ähnliche Inhalte

Ähnlich wie Angular 2.0: Architektur und Konzepte für moderne JavaScript-Anwendungen

Angular 2: Neuerungen und Migration
Angular 2: Neuerungen und MigrationAngular 2: Neuerungen und Migration
Angular 2: Neuerungen und MigrationManfred Steyer
 
Angular 2 Workshop November 2015 von der w-jax 2015
Angular 2 Workshop November 2015 von der w-jax 2015Angular 2 Workshop November 2015 von der w-jax 2015
Angular 2 Workshop November 2015 von der w-jax 2015Manfred Steyer
 
.NET Summit 2016 München: Angular 2 mit TypeScript
.NET Summit 2016 München: Angular 2 mit TypeScript.NET Summit 2016 München: Angular 2 mit TypeScript
.NET Summit 2016 München: Angular 2 mit TypeScriptManfred Steyer
 
Moderne Web-Anwendungen mit Angular 2
Moderne Web-Anwendungen mit Angular 2Moderne Web-Anwendungen mit Angular 2
Moderne Web-Anwendungen mit Angular 2Manfred Steyer
 
Moderne Web-Anwendungen mit Angular 2
Moderne Web-Anwendungen mit Angular 2Moderne Web-Anwendungen mit Angular 2
Moderne Web-Anwendungen mit Angular 2Manfred Steyer
 
Angular 2: Custom Components
Angular 2: Custom ComponentsAngular 2: Custom Components
Angular 2: Custom ComponentsManfred Steyer
 
Komponenten mit Angular 2, Deep Dive
Komponenten mit Angular 2, Deep DiveKomponenten mit Angular 2, Deep Dive
Komponenten mit Angular 2, Deep DiveManfred Steyer
 
Progressive Web Apps mit Angular
Progressive Web Apps mit AngularProgressive Web Apps mit Angular
Progressive Web Apps mit AngularJens Binfet
 
Modern anuglar 01_intro
Modern anuglar 01_introModern anuglar 01_intro
Modern anuglar 01_introManfred Steyer
 
Angular 2 Überblick Oktober 2015
Angular 2 Überblick Oktober 2015Angular 2 Überblick Oktober 2015
Angular 2 Überblick Oktober 2015Manfred Steyer
 
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015Manfred Steyer
 
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)Christian Janz
 
Component Based UI mit Angular
Component Based UI mit AngularComponent Based UI mit Angular
Component Based UI mit AngularGregor Woiwode
 
ArcGIS Enterprise Content Migration mit FME
ArcGIS Enterprise Content Migration mit FMEArcGIS Enterprise Content Migration mit FME
ArcGIS Enterprise Content Migration mit FMESafe Software
 
MEAN SCS in der Cloud
MEAN SCS in der CloudMEAN SCS in der Cloud
MEAN SCS in der CloudTorsten Fink
 

Ähnlich wie Angular 2.0: Architektur und Konzepte für moderne JavaScript-Anwendungen (20)

Angular 2: Neuerungen und Migration
Angular 2: Neuerungen und MigrationAngular 2: Neuerungen und Migration
Angular 2: Neuerungen und Migration
 
Angular 2 Workshop November 2015 von der w-jax 2015
Angular 2 Workshop November 2015 von der w-jax 2015Angular 2 Workshop November 2015 von der w-jax 2015
Angular 2 Workshop November 2015 von der w-jax 2015
 
Was bringt Angular 2?
Was bringt Angular 2?Was bringt Angular 2?
Was bringt Angular 2?
 
.NET Summit 2016 München: Angular 2 mit TypeScript
.NET Summit 2016 München: Angular 2 mit TypeScript.NET Summit 2016 München: Angular 2 mit TypeScript
.NET Summit 2016 München: Angular 2 mit TypeScript
 
Moderne Web-Anwendungen mit Angular 2
Moderne Web-Anwendungen mit Angular 2Moderne Web-Anwendungen mit Angular 2
Moderne Web-Anwendungen mit Angular 2
 
Moderne Web-Anwendungen mit Angular 2
Moderne Web-Anwendungen mit Angular 2Moderne Web-Anwendungen mit Angular 2
Moderne Web-Anwendungen mit Angular 2
 
Angular 2: Custom Components
Angular 2: Custom ComponentsAngular 2: Custom Components
Angular 2: Custom Components
 
Komponenten mit Angular 2, Deep Dive
Komponenten mit Angular 2, Deep DiveKomponenten mit Angular 2, Deep Dive
Komponenten mit Angular 2, Deep Dive
 
JavaMagazin - AngularJS
JavaMagazin - AngularJSJavaMagazin - AngularJS
JavaMagazin - AngularJS
 
AngularJS
AngularJSAngularJS
AngularJS
 
Progressive Web Apps mit Angular
Progressive Web Apps mit AngularProgressive Web Apps mit Angular
Progressive Web Apps mit Angular
 
Modern anuglar 01_intro
Modern anuglar 01_introModern anuglar 01_intro
Modern anuglar 01_intro
 
Angular 2 Überblick Oktober 2015
Angular 2 Überblick Oktober 2015Angular 2 Überblick Oktober 2015
Angular 2 Überblick Oktober 2015
 
Angular 2 Components
Angular 2 ComponentsAngular 2 Components
Angular 2 Components
 
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
 
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)
 
Workshop Vue js
Workshop Vue jsWorkshop Vue js
Workshop Vue js
 
Component Based UI mit Angular
Component Based UI mit AngularComponent Based UI mit Angular
Component Based UI mit Angular
 
ArcGIS Enterprise Content Migration mit FME
ArcGIS Enterprise Content Migration mit FMEArcGIS Enterprise Content Migration mit FME
ArcGIS Enterprise Content Migration mit FME
 
MEAN SCS in der Cloud
MEAN SCS in der CloudMEAN SCS in der Cloud
MEAN SCS in der Cloud
 

Mehr von Manfred Steyer

Datengetriebene Web APIs mit Entity Framework
Datengetriebene Web APIs mit Entity FrameworkDatengetriebene Web APIs mit Entity Framework
Datengetriebene Web APIs mit Entity FrameworkManfred Steyer
 
Angular 2 Upgrade: Migration von AngularJS 1.x zu 2.0
Angular 2 Upgrade: Migration von AngularJS 1.x zu 2.0Angular 2 Upgrade: Migration von AngularJS 1.x zu 2.0
Angular 2 Upgrade: Migration von AngularJS 1.x zu 2.0Manfred Steyer
 
Web APIs mit ASP.NET Core 1
Web APIs mit ASP.NET Core 1Web APIs mit ASP.NET Core 1
Web APIs mit ASP.NET Core 1Manfred Steyer
 
The newst new Router for Angular 2 ("Version 3")
The newst new Router for Angular 2 ("Version 3")The newst new Router for Angular 2 ("Version 3")
The newst new Router for Angular 2 ("Version 3")Manfred Steyer
 
Databinding and Performance-Tuning in Angular 2
Databinding and Performance-Tuning in Angular 2Databinding and Performance-Tuning in Angular 2
Databinding and Performance-Tuning in Angular 2Manfred Steyer
 
Modern authentication solutions in Angular 2 with OAuth 2.0 and OpenId Connect
Modern authentication solutions in Angular 2 with OAuth 2.0 and OpenId ConnectModern authentication solutions in Angular 2 with OAuth 2.0 and OpenId Connect
Modern authentication solutions in Angular 2 with OAuth 2.0 and OpenId ConnectManfred Steyer
 
Progressive web apps with Angular 2
Progressive web apps with Angular 2Progressive web apps with Angular 2
Progressive web apps with Angular 2Manfred Steyer
 
Der neueste neue Router (Version 3) für Angular 2
Der neueste neue Router (Version 3) für Angular 2Der neueste neue Router (Version 3) für Angular 2
Der neueste neue Router (Version 3) für Angular 2Manfred Steyer
 
ASP.NET Core 1 for MVC- and WebAPI-Devs
ASP.NET Core 1 for MVC- and WebAPI-DevsASP.NET Core 1 for MVC- and WebAPI-Devs
ASP.NET Core 1 for MVC- and WebAPI-DevsManfred Steyer
 
EF Core 1: News features and changes
EF Core 1: News features and changesEF Core 1: News features and changes
EF Core 1: News features and changesManfred Steyer
 
Angular 2: Migration - SSD 2016 London
Angular 2: Migration - SSD 2016 LondonAngular 2: Migration - SSD 2016 London
Angular 2: Migration - SSD 2016 LondonManfred Steyer
 
Angular 2 - SSD 2016 London
Angular 2 - SSD 2016 LondonAngular 2 - SSD 2016 London
Angular 2 - SSD 2016 LondonManfred Steyer
 
ASP.NET Web API Deep Dive - SSD 2016 London
ASP.NET Web API Deep Dive - SSD 2016 LondonASP.NET Web API Deep Dive - SSD 2016 London
ASP.NET Web API Deep Dive - SSD 2016 LondonManfred Steyer
 
Web APIs mit ASP.NET MVC Core 1
Web APIs mit ASP.NET MVC Core 1Web APIs mit ASP.NET MVC Core 1
Web APIs mit ASP.NET MVC Core 1Manfred Steyer
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScriptManfred Steyer
 
Datenbasierte Services mit Entity Framework und Co.
Datenbasierte Services mit Entity Framework und Co.	Datenbasierte Services mit Entity Framework und Co.
Datenbasierte Services mit Entity Framework und Co. Manfred Steyer
 
Datenbasierte Services mit Entity Framework und Co.
Datenbasierte Services mit Entity Framework und Co.	Datenbasierte Services mit Entity Framework und Co.
Datenbasierte Services mit Entity Framework und Co. Manfred Steyer
 
Web APIs mit ASP.NET MVC Core 1
Web APIs mit ASP.NET MVC Core 1Web APIs mit ASP.NET MVC Core 1
Web APIs mit ASP.NET MVC Core 1Manfred Steyer
 

Mehr von Manfred Steyer (20)

Datengetriebene Web APIs mit Entity Framework
Datengetriebene Web APIs mit Entity FrameworkDatengetriebene Web APIs mit Entity Framework
Datengetriebene Web APIs mit Entity Framework
 
Angular 2 Upgrade: Migration von AngularJS 1.x zu 2.0
Angular 2 Upgrade: Migration von AngularJS 1.x zu 2.0Angular 2 Upgrade: Migration von AngularJS 1.x zu 2.0
Angular 2 Upgrade: Migration von AngularJS 1.x zu 2.0
 
Web APIs mit ASP.NET Core 1
Web APIs mit ASP.NET Core 1Web APIs mit ASP.NET Core 1
Web APIs mit ASP.NET Core 1
 
The newst new Router for Angular 2 ("Version 3")
The newst new Router for Angular 2 ("Version 3")The newst new Router for Angular 2 ("Version 3")
The newst new Router for Angular 2 ("Version 3")
 
Databinding and Performance-Tuning in Angular 2
Databinding and Performance-Tuning in Angular 2Databinding and Performance-Tuning in Angular 2
Databinding and Performance-Tuning in Angular 2
 
Modern authentication solutions in Angular 2 with OAuth 2.0 and OpenId Connect
Modern authentication solutions in Angular 2 with OAuth 2.0 and OpenId ConnectModern authentication solutions in Angular 2 with OAuth 2.0 and OpenId Connect
Modern authentication solutions in Angular 2 with OAuth 2.0 and OpenId Connect
 
Progressive web apps with Angular 2
Progressive web apps with Angular 2Progressive web apps with Angular 2
Progressive web apps with Angular 2
 
Der neueste neue Router (Version 3) für Angular 2
Der neueste neue Router (Version 3) für Angular 2Der neueste neue Router (Version 3) für Angular 2
Der neueste neue Router (Version 3) für Angular 2
 
Webpack
WebpackWebpack
Webpack
 
ASP.NET Core 1 for MVC- and WebAPI-Devs
ASP.NET Core 1 for MVC- and WebAPI-DevsASP.NET Core 1 for MVC- and WebAPI-Devs
ASP.NET Core 1 for MVC- and WebAPI-Devs
 
EF Core 1: News features and changes
EF Core 1: News features and changesEF Core 1: News features and changes
EF Core 1: News features and changes
 
Angular 2: Migration - SSD 2016 London
Angular 2: Migration - SSD 2016 LondonAngular 2: Migration - SSD 2016 London
Angular 2: Migration - SSD 2016 London
 
Angular 2 - SSD 2016 London
Angular 2 - SSD 2016 LondonAngular 2 - SSD 2016 London
Angular 2 - SSD 2016 London
 
ASP.NET Web API Deep Dive - SSD 2016 London
ASP.NET Web API Deep Dive - SSD 2016 LondonASP.NET Web API Deep Dive - SSD 2016 London
ASP.NET Web API Deep Dive - SSD 2016 London
 
Web APIs mit ASP.NET MVC Core 1
Web APIs mit ASP.NET MVC Core 1Web APIs mit ASP.NET MVC Core 1
Web APIs mit ASP.NET MVC Core 1
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
 
Angular 2: Routing
Angular 2: RoutingAngular 2: Routing
Angular 2: Routing
 
Datenbasierte Services mit Entity Framework und Co.
Datenbasierte Services mit Entity Framework und Co.	Datenbasierte Services mit Entity Framework und Co.
Datenbasierte Services mit Entity Framework und Co.
 
Datenbasierte Services mit Entity Framework und Co.
Datenbasierte Services mit Entity Framework und Co.	Datenbasierte Services mit Entity Framework und Co.
Datenbasierte Services mit Entity Framework und Co.
 
Web APIs mit ASP.NET MVC Core 1
Web APIs mit ASP.NET MVC Core 1Web APIs mit ASP.NET MVC Core 1
Web APIs mit ASP.NET MVC Core 1
 

Angular 2.0: Architektur und Konzepte für moderne JavaScript-Anwendungen

  • 1. 1 Angular 2.0: Architektur und Konzepte für moderne JavaScript-Anwendungen Manfred Steyer Aktuelles Buch Folie 2 O'Reilly: AngularJS: Moderne Webanwendungen und Single Page Applications mit JavaScript Steyer, Softic
  • 2. 2 Ziel Überblick zu Angular 2 gewinnen Migrationspfade Page  3 Inhalt Warum Angular ? Überblick zu Angular 2 Datenbindung näher betrachtet DEMO Migrationspfade Fazit Page  4
  • 3. 3 WARUM ANGULAR? Page  5 Plattformen und Usability HTML + JavaScript
  • 4. 4 High-Level Architektur Page  7 Services HTML/ JavaScript-Client HTTP Single Page Application (SPA) Page  8 HTML + JavaScript => Komplexität
  • 5. 5 Page  9 HTML + JavaScript + jQuery => Komplexität Page  10 Frameworks machen SPA beherrschbar
  • 6. 6 Typische Möglichkeiten Page  11 Abstraktion MV* Datenbindung Testing Komponenten Routing Validierung Community (Februar 2016) Page  13 AngularJS EmberJS Durandal Aurelia Stars 46.168 15.615 1.680 5.220 Forks 21.632 3.364 379 231 Contributers 1.393 551 69 21
  • 7. 7 Google Trends (Februar 2016) Page  14 Job Trends (Indeed.com, Februar 2016) Page  16
  • 8. 8 HERAUSFORDERUNGEN IN ANGULARJS 1.X Page  17 Herausforderungen in AngularJS 1.x Page  18 Performance Nachvollziehbarkeit Änderungsverfolgung Use-Case: Anwendungen Zusammenspiel mit anderen Bibliotheken
  • 9. 9 ANGULAR 2 Page  19 Was ist Angular 2 ?  Neuimplementierung  Performance  Komponenten (Web Components)  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  20
  • 10. 10 Stand der Dinge BETA seit Dezember 2015 Kern laut Produkt-Team stabil Moving-Parts jenseits des Kerns Kommt bereits bei Google zum Einsatz  Green Tea, CMS, 100s Devs, 1.000.000s LOC  Google AdWords, 100s Devs, 1.000.000s LOC Page  21 Component Controller Page  22 @Component({ selector: 'flug-suchen' }) @View({ templateUrl: 'flug-suchen.html', directives: [NgFor, NgIf] }) export class FlugSuchen { von: string; nach: string; fluege: Array<Flug>; constructor(flugService: FlugService) { } flugSuchen() { [...] } selectFlug(flug) { [...] } }
  • 11. 11 View Page  23 <input [(ngModel)]="von"> […] <table [hidden]="fluege.length == 0"> <tr *ngFor="#flug of fluege"> <td>{{flug.id}}</td> <td>{{flug.datum}}</td> <td>{{flug.abflugOrt}}</td> <td>{{flug.zielOrt}}</td> <td><a href="#" (click)="selectFlug(flug)">Auswählen</a></td> </tr> </table> View Page  24 <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>
  • 12. 12 DATENBINDUNG NÄHER BETRACHTET Page  25 Data-Binding in Angular 1.x Page  26 Model Model Directive
  • 13. 13 Komponenten-Baum in Angular 2 Page  27 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  28
  • 14. 14 Property-Binding Page  29 model item item {{ item.title }} {{ item.title }} [http://victorsavkin.com/post/110170125256/change-detection-in-angular-2] Weitere Performance-Verbesserungen Page  30 Immutable Data Observables
  • 15. 15 Immutable Objects and Performance Page  31 oldObject == newObject  oldObject.a == newObject.a && oldObject.b == newObject.b … Event-Bindings (One-Way, Bottom/Up) Page  32 {{ item.title }} {{ item.title }} Event-Handler Event-Handler
  • 16. 16 Event-Bindings (One-Way, Bottom/Up) Kein Digest um Events zu versenden Aber: Events können Daten ändern  Property Binding Page  33 Property- und Event-Bindings Page  34 Property-Binding ausführen Event-Handler ausführen Ereignis tritt ein App ist bereit Alle Handler ausgeführt Properties gebunden
  • 17. 17 View Page  35 <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  36
  • 18. 18 Syntax-Zucker für 2-Way-Binding Page  39 <input [(ngModel)]="von"> <input bindon-ngModel="von"> DEMO: ANGULAR 2 MIT TYPESCRIPT UND @CODE Page  40
  • 19. 19 MIGRATION Page  41 Migration Page  43 Angular 1.x Angular 2
  • 20. 20 Möglichkeiten  Component Router: Parallelbetrieb  NgUpgrade: Angular 2 und Angular 1.x mixen  Angular 1.5: Komponenten in Angular 1  NgForward: AngularJS 1.x im Angular-2-Stil  Sinnvoll: Vorbereitung durch Einsatz von modernen AngularJS 1.x-Code vorbereiten: EcmaScript 6, TypeScript, Dekoratoren, Controller-As Page  44 [https://github.com/angular/ngUpgrade] Ein Blick auf ngUpgrade Page  45 FlugCard FlugSvc PassagierCard PassagierSvc FlugSuchen PassagierSuchen Anwendung1 1 1 1 2 2 2
  • 21. 21 Fazit  Angular: SPA-Framework mit großer Verbreitung  Angular 2 ist Neuimplementierung  Fokus: Komponenten, Performance, Modern Web  Komponenten: Wartbarkeit, Wiederverwendbarkeit  TypeScript, ES6: Wartbarkeit  Datenbindungskonzept: Performance  DI: Testbarkeit und Austauschbarkeit  Flexibles Rendering  Parallelbetrieb von Version 1 und 2 manfred.steyer@SOFTWAREarchitekt.at SOFTWAREarchitekt.at ManfredSteyer Kontakt