SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
1
Wiederverwendbare
JavaScript-Komponenten mit Angular 2.0
Deep Dive
Manfred Steyer
ManfredSteyer
Side-Projects
Page  2
www.software-engineering-leadership.de
2
Ziele
Möglichkeiten zum Schreiben von
Komponenten in Angular 2 kennen lernen
Fokus auf Konzepte
Syntax kann sich noch ändern
Nicht: Allgemeine Angular-2-Einführung
Page  3
Inhalt
Angular 2
Erste Schritte: Bindings
Kommunikation zwischen Direktiven
Life-Cycle-Methoden
Two-Way-Binding
Mit Host-Element kommunizieren
Zusammenfassung
Page  4
3
Didaktik
Folien
Viel Live-Coding
Page  5
ANGULAR 2
Page  38
4
Was ist Angular 2
SPA-
Framework
Moderne
Apps
Nachfolger
von
AngularJS
Große
Community
Noch Alpha
Page  39
Technische Eigenschaften
Performance Komponenten TypeScript/ ES6
Modularisierung
Flexibles
Rendering
Testbarkeit
Datenbindung
Page  40
5
ERSTE SCHRITTE MIT
KOMPONENTEN
Page  41
Direktiven und Komponenten
Page  42
• Verhalten für
Elemente
• CSS-Selektor
Direktiven
• Direktiven mit
TemplateKomponenten
• Offener Standard
• Unterstützung durch
Angular 2 geplant
Web-
Components
6
Option-Box und Option-Item
Page  43
App-Component (Controller)
Page  44
@Component({
selector: 'my-app'
})
@View({
templateUrl: 'app.html',
directives: [OptionItem]
})
class AppComponent {
title: string;
constructor() {
this.title = 'Component-Demo';
}
change(event, info) {
console.log('change!');
}
}
7
App-Component (View)
Page  45
<h1>{{title}}</h1>
[…]
<option-item #i1
[selected]="true"
[value]="1"
(change)="change($event, i1.selected)">
Per Express
</option-item>
[…]
Option-Item (Controller)
Page  46
@Component({
selector: 'option-item',
properties: ['selected', 'value'],
events: ['change']
})
@View({
templateUrl: 'option-item.html',
directives: [NgIf]
})
export class OptionItem {
selected: boolean;
value: string;
change: EventEmitter = new EventEmitter();
select() { […] }
[…]
}
8
Option-Item (View)
Page  47
<div
[class.itemOn]="selected"
[class.itemOff]="!selected"
(^click)="select()">
<ng-content></ng-content>
<span *ng-if="selected">*</span>
</div>
<option-item #i1
[selected]="true"
[value]="1"
(change)="change($event, i1.selected)">
Per Express
</option-item>
DEMO
Page  48
9
KOMMUNIKATION
ZWISCHEN DIREKTIVEN
Page  49
Option-Box
Page  50
<option-box>
<option-item […]>Per Express</option-item>
<option-item […]>Per Einschreiben</option-item>
</option-box>
constructor(@Optional @Anchestor optionBox: OptionBox) {
[…]
}
10
DEMO
Page  51
LIFE-CYCLE-METHODEN
Page  52
11
Life-Cycle-Methoden
onInit
onCheck
onChange
onAllChangesDone
onDestroy
Page  53
Registrieren
Page  54
@Component({
[…]
lifecycle: [LifecycleEvent.onChange]
})
@View({
[…]
})
export class OptionItem {
onChange() {
[…]
}
}
12
DEMO
Page  55
TWO-WAY-BINDING
Page  56
13
Syntax-Zucker
Page  57
<option-box [value]="value" (value)="setValue($event)">
[…]
</option-box>
<option-box [(value)]="value">
[…]
</option-box>
<option-box [value]="value" (value)="value = $event">
[…]
</option-box>
DEMO
Page  58
14
MIT HOST-ELEMENT
KOMMUNIZIEREN
Page  59
ElementRef und @Attribute
Page  60
constructor(
elm: ElementRef,
@Attribute('round') round: string) {
[…]
}
15
ElementRef und @Attribute
Page  61
constructor(
elm: ElementRef,
@Attribute('round') round: string) {
if (round == 'true') {
elm.nativeElement
.firstElementChild
.style
.borderRadius = "5px";
}
}
DEMO
Page  62
16
Zusammenfassung
 Angular 2 ist komponenten-orientiert
 ES6-Klassen, IntelliSense/Typing mit TypeScript
 Property-Bindings
 Event-Bindings
 Two-Way-Binding =
Property- + Event-Binding + Syntax-Zucker
 Content-Reprojection
 Referenz auf Ancester und Host-Element
 Life-Cycle-Events
[mail] manfred.steyer@softwarearchitekt.at
[blog] www.softwarearchitekt.at
[twitter] ManfredSteyer
Kontakt
www.software-engineering-leadership.de

Weitere ähnliche Inhalte

Ähnlich wie Angular 2 Components

.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
 
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
 
Angular 2 Workshop Oktober 2015
Angular 2 Workshop Oktober 2015Angular 2 Workshop Oktober 2015
Angular 2 Workshop Oktober 2015Manfred Steyer
 
Modern anuglar 01_intro
Modern anuglar 01_introModern anuglar 01_intro
Modern anuglar 01_introManfred Steyer
 
Angular 2.0: Architektur und Konzepte für moderne JavaScript-Anwendungen
Angular 2.0: Architektur und Konzepte für moderne JavaScript-AnwendungenAngular 2.0: Architektur und Konzepte für moderne JavaScript-Anwendungen
Angular 2.0: Architektur und Konzepte für moderne JavaScript-AnwendungenManfred 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
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in RailsAngelo Maron
 
Implementierung der Knowledge Engineering Workbench in myCBR
Implementierung der Knowledge Engineering Workbench in myCBRImplementierung der Knowledge Engineering Workbench in myCBR
Implementierung der Knowledge Engineering Workbench in myCBRAlexander Hundt
 
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickTaugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickPhilipp Burgmer
 
Entwicklung eines leichtgewichtigen Web-Clients für das Lernsystem Kakadu
Entwicklung eines leichtgewichtigen Web-Clients für das Lernsystem KakaduEntwicklung eines leichtgewichtigen Web-Clients für das Lernsystem Kakadu
Entwicklung eines leichtgewichtigen Web-Clients für das Lernsystem KakaduGeorg Schmidhammer
 

Ähnlich wie Angular 2 Components (20)

.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
 
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
 
Angular 2 Workshop Oktober 2015
Angular 2 Workshop Oktober 2015Angular 2 Workshop Oktober 2015
Angular 2 Workshop Oktober 2015
 
Modern anuglar 01_intro
Modern anuglar 01_introModern anuglar 01_intro
Modern anuglar 01_intro
 
Schnelleinstieg in Angular
Schnelleinstieg in AngularSchnelleinstieg in Angular
Schnelleinstieg in Angular
 
Angular 2.0: Architektur und Konzepte für moderne JavaScript-Anwendungen
Angular 2.0: Architektur und Konzepte für moderne JavaScript-AnwendungenAngular 2.0: Architektur und Konzepte für moderne JavaScript-Anwendungen
Angular 2.0: Architektur und Konzepte für moderne JavaScript-Anwendungen
 
AngularJs
AngularJsAngularJs
AngularJs
 
Was bringt Angular 2?
Was bringt Angular 2?Was bringt Angular 2?
Was bringt Angular 2?
 
Workshop Vue js
Workshop Vue jsWorkshop Vue js
Workshop Vue js
 
AngularJS
AngularJSAngularJS
AngularJS
 
Net@night asp.net mvc
Net@night asp.net mvcNet@night asp.net mvc
Net@night asp.net mvc
 
Systementwurf mit UML
Systementwurf mit UMLSystementwurf mit UML
Systementwurf mit UML
 
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
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in Rails
 
react-de.pdf
react-de.pdfreact-de.pdf
react-de.pdf
 
Implementierung der Knowledge Engineering Workbench in myCBR
Implementierung der Knowledge Engineering Workbench in myCBRImplementierung der Knowledge Engineering Workbench in myCBR
Implementierung der Knowledge Engineering Workbench in myCBR
 
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickTaugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
 
JavaMagazin - AngularJS
JavaMagazin - AngularJSJavaMagazin - AngularJS
JavaMagazin - AngularJS
 
Entwicklung eines leichtgewichtigen Web-Clients für das Lernsystem Kakadu
Entwicklung eines leichtgewichtigen Web-Clients für das Lernsystem KakaduEntwicklung eines leichtgewichtigen Web-Clients für das Lernsystem Kakadu
Entwicklung eines leichtgewichtigen Web-Clients für das Lernsystem Kakadu
 

Mehr von Manfred Steyer

Der neue Component Router für Angular 2
Der neue Component Router für Angular 2Der neue Component Router für Angular 2
Der neue Component Router für Angular 2Manfred Steyer
 
Offlinefähige Browseranwendungen: Progressive Web-Apps mit Angular 2
Offlinefähige Browseranwendungen: Progressive Web-Apps mit Angular 2Offlinefähige Browseranwendungen: Progressive Web-Apps mit Angular 2
Offlinefähige Browseranwendungen: Progressive Web-Apps mit Angular 2Manfred Steyer
 
Angular 2: Die Ideen hinter Datenbindung und Formularen im Detail betrachtet
Angular 2: Die Ideen hinter Datenbindung und Formularen im Detail betrachtetAngular 2: Die Ideen hinter Datenbindung und Formularen im Detail betrachtet
Angular 2: Die Ideen hinter Datenbindung und Formularen im Detail betrachtetManfred 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
 

Mehr von Manfred Steyer (20)

Der neue Component Router für Angular 2
Der neue Component Router für Angular 2Der neue Component Router für Angular 2
Der neue Component Router für Angular 2
 
Offlinefähige Browseranwendungen: Progressive Web-Apps mit Angular 2
Offlinefähige Browseranwendungen: Progressive Web-Apps mit Angular 2Offlinefähige Browseranwendungen: Progressive Web-Apps mit Angular 2
Offlinefähige Browseranwendungen: Progressive Web-Apps mit Angular 2
 
Angular 2: Die Ideen hinter Datenbindung und Formularen im Detail betrachtet
Angular 2: Die Ideen hinter Datenbindung und Formularen im Detail betrachtetAngular 2: Die Ideen hinter Datenbindung und Formularen im Detail betrachtet
Angular 2: Die Ideen hinter Datenbindung und Formularen im Detail betrachtet
 
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
 

Angular 2 Components

  • 1. 1 Wiederverwendbare JavaScript-Komponenten mit Angular 2.0 Deep Dive Manfred Steyer ManfredSteyer Side-Projects Page  2 www.software-engineering-leadership.de
  • 2. 2 Ziele Möglichkeiten zum Schreiben von Komponenten in Angular 2 kennen lernen Fokus auf Konzepte Syntax kann sich noch ändern Nicht: Allgemeine Angular-2-Einführung Page  3 Inhalt Angular 2 Erste Schritte: Bindings Kommunikation zwischen Direktiven Life-Cycle-Methoden Two-Way-Binding Mit Host-Element kommunizieren Zusammenfassung Page  4
  • 4. 4 Was ist Angular 2 SPA- Framework Moderne Apps Nachfolger von AngularJS Große Community Noch Alpha Page  39 Technische Eigenschaften Performance Komponenten TypeScript/ ES6 Modularisierung Flexibles Rendering Testbarkeit Datenbindung Page  40
  • 5. 5 ERSTE SCHRITTE MIT KOMPONENTEN Page  41 Direktiven und Komponenten Page  42 • Verhalten für Elemente • CSS-Selektor Direktiven • Direktiven mit TemplateKomponenten • Offener Standard • Unterstützung durch Angular 2 geplant Web- Components
  • 6. 6 Option-Box und Option-Item Page  43 App-Component (Controller) Page  44 @Component({ selector: 'my-app' }) @View({ templateUrl: 'app.html', directives: [OptionItem] }) class AppComponent { title: string; constructor() { this.title = 'Component-Demo'; } change(event, info) { console.log('change!'); } }
  • 7. 7 App-Component (View) Page  45 <h1>{{title}}</h1> […] <option-item #i1 [selected]="true" [value]="1" (change)="change($event, i1.selected)"> Per Express </option-item> […] Option-Item (Controller) Page  46 @Component({ selector: 'option-item', properties: ['selected', 'value'], events: ['change'] }) @View({ templateUrl: 'option-item.html', directives: [NgIf] }) export class OptionItem { selected: boolean; value: string; change: EventEmitter = new EventEmitter(); select() { […] } […] }
  • 8. 8 Option-Item (View) Page  47 <div [class.itemOn]="selected" [class.itemOff]="!selected" (^click)="select()"> <ng-content></ng-content> <span *ng-if="selected">*</span> </div> <option-item #i1 [selected]="true" [value]="1" (change)="change($event, i1.selected)"> Per Express </option-item> DEMO Page  48
  • 9. 9 KOMMUNIKATION ZWISCHEN DIREKTIVEN Page  49 Option-Box Page  50 <option-box> <option-item […]>Per Express</option-item> <option-item […]>Per Einschreiben</option-item> </option-box> constructor(@Optional @Anchestor optionBox: OptionBox) { […] }
  • 11. 11 Life-Cycle-Methoden onInit onCheck onChange onAllChangesDone onDestroy Page  53 Registrieren Page  54 @Component({ […] lifecycle: [LifecycleEvent.onChange] }) @View({ […] }) export class OptionItem { onChange() { […] } }
  • 13. 13 Syntax-Zucker Page  57 <option-box [value]="value" (value)="setValue($event)"> […] </option-box> <option-box [(value)]="value"> […] </option-box> <option-box [value]="value" (value)="value = $event"> […] </option-box> DEMO Page  58
  • 14. 14 MIT HOST-ELEMENT KOMMUNIZIEREN Page  59 ElementRef und @Attribute Page  60 constructor( elm: ElementRef, @Attribute('round') round: string) { […] }
  • 15. 15 ElementRef und @Attribute Page  61 constructor( elm: ElementRef, @Attribute('round') round: string) { if (round == 'true') { elm.nativeElement .firstElementChild .style .borderRadius = "5px"; } } DEMO Page  62
  • 16. 16 Zusammenfassung  Angular 2 ist komponenten-orientiert  ES6-Klassen, IntelliSense/Typing mit TypeScript  Property-Bindings  Event-Bindings  Two-Way-Binding = Property- + Event-Binding + Syntax-Zucker  Content-Reprojection  Referenz auf Ancester und Host-Element  Life-Cycle-Events [mail] manfred.steyer@softwarearchitekt.at [blog] www.softwarearchitekt.at [twitter] ManfredSteyer Kontakt www.software-engineering-leadership.de