Angular 2: Die Ideen hinter Datenbindung und Formularen im Detail betrachtet
1. 26.09.2016
1
Angular 2: Die Ideen hinter
Datenbindung und Formularen
im Detail betrachtet
Manfred Steyer
ManfredSteyer
Über mich …
• Manfred Steyer
• SOFTWAREarchitekt.at
• Trainer & Consultant
• GDE & MVP
• Focus: Angular 2
Page 2
ManfredSteyer
2. 26.09.2016
2
Ziele
• Wie funktioniert die Datenbindung in Angular 2?
• Wie kann man die Performance für Datenbindung verbessern?
• Immutables
• Observables
Nicht-Ziele
• Allgemeine Einführung in Angular 2
3. 26.09.2016
3
Inhalt
• Überblick zur Datenbindung in Angular 2
• Datenbindung hinter den Kulissen
• Two-Way-Binding
• Performancetuning mit Immutables und Observables
• Formulare
Warum ist dieses Thema interessant?
• Grundlegender Mechanismus jedes SPA-Frameworks
• Beeinflusst Performance maßgeblich
• Two-Way-Binding für u. a. für Biz-Anwendungen
• Ansatzpunkte für Performanceoptimierungen
7. 26.09.2016
7
Komponentne-Baum in Angular 2
Page 13
Komponente für gesamte App
Komponente (z. B. list)
Komponente
(z. B. list-item)
Komponente
(z. B. list-item)
Regeln für Property Bindings
• Komponente hängt nur von Daten des Parent ab
• Komponente hängt nie von Daten der Kinder ab
• Abhängigkeits-Graph is ein Baum
• Angular benötigt nur eine einzige Iteration („digest“)
zum Abgleich des Baumes
Page 14
16. 26.09.2016
16
Performance-Tuning mit
Immutables and Observables
Angular traversiert standardmäßig den
gesamten Komponenten-Baum
flights
flight flight
{{ flight.id }} {{ flight.id }}
FlightSearch
Card Card
17. 26.09.2016
17
Immutables
• Unveränderbare Objekte
• Wenn sich repräsentierte Daten ändern:
Neues Objekt erzeugen
• Man kann einfach herausfinden, ob sich etwas geändert hat
• oldObject == newObject
• Mit oder ohne Bibliotheken möglich (wie immutable.js)
Immutables
const ONE_MINUTE = 1000 * 60;
let oldFlights = this.flights;
let oldFlight = oldFlights[0]; // Flight to change!
let oldFlightDate = new Date(oldFlight.date); // Date to change
19. 26.09.2016
19
Immutables und Angular 2
• Daten fließen top/down
• Modus für Optimierung: Jedes @Input-Binding einer
Komponente ist immutable
• Vereinfacht Prüfung auf Änderung
• Wenn sich kein Input einer Komponente geändert hat
• Komponente inkl. aller Sub-Komponenten auslassen
Immutables und Angular
flights
flight flight
{{ flight.id }} {{ flight.id }}
FlightSearch
Card Card
Änderung
22. 26.09.2016
22
Observable binden
<flight-card
[item]="flight | async" […]>
</flight-card>
Nicht „Alles-oder-Nichts“
• Optimierungen mit Immutables und Observables
funktionieren nicht nach dem „Alles-oder-Nichts“-Prinzip
• Sie können bei Bedarf genutzt werden