2016 First steps with Angular 2 – enterjs
-
Upload
geildanke -
Category
Technology
-
view
368 -
download
1
Transcript of 2016 First steps with Angular 2 – enterjs
geildanke.com @fischaelameer
geildanke.com @fischaelameer
Components Data-Binding
Template-Syntax Services
Dependency Injection Pipes
…
geildanke.com @fischaelameer
Quelle: https://twitter.com/esfand/status/703678692661338115
geildanke.com @fischaelameer
Quelle: https://www.w3counter.com/globalstats.php?year=2009&month=7
geildanke.com @fischaelameer
Quelle: https://www.w3counter.com/globalstats.php?year=2009&month=7
geildanke.com @fischaelameer
ES2015 JavaScript Modules Web Components
(Shadow DOM, Templates)
geildanke.com @fischaelameer
Angular is a development platform for building mobile and desktop
web applications.
geildanke.com @fischaelameer
Platform-unabhängig
Browser Web-Worker Native Apps
Server-side Rendering
geildanke.com @fischaelameer
import { AppComponent } from './app.component';
app.component.ts:
@Component(...)export class AppComponent { … }
app.another-component.ts:
geildanke.com @fischaelameer
A Component controls a patch of screen real estate that we could call a view.
geildanke.com @fischaelameer
Component
View
Metadata
import { Component } from '@angular/core';
@Component({ selector: 'enterjs-app', template: '<h1>Hello EnterJS</h1>'})
export class EnterjsAppComponent { … }
geildanke.com @fischaelameer
@Component({ selector: 'enterjs-app', template: '<h1>Hello EnterJS</h1>'})
export class EnterjsAppComponent { … }
Decorators
geildanke.com @fischaelameer
@Component({ selector: 'enterjs-app', template: '<h1>Hello EnterJS</h1>'})
export class EnterjsAppComponent {…
}
var EnterjsAppComponent = ng.core .Component({ selector: 'enterjs-app', template: '<h1>Hello EnterJS</h1>' }) .Class({ constructor: function () { … } });
TypeScript ES5
geildanke.com @fischaelameer
@Component({ selector: 'enterjs-app', templateUrl: 'enterjs.component.html', styleUrls: [ 'enterjs.component.css' ]})
geildanke.com @fischaelameer
Component
View
Metadata
Component
View
Metadata
Component
View
Metadata
Component
View
Metadata
Component
View
Metadata
geildanke.com @fischaelameer
import { Component } from 'angular2/core';
@Component({ selector: 'talk-cmp', templateUrl: './talk.component.html'})
export class TalkComponent { … }
import { Component } from '@angular/core';import { TalkComponent } from './talk.component';
@Component({ selector: 'enterjs-app', template: '<talk-cmp></talk-cmp>', directives: [ TalkComponent ]})
export class EnterjsAppComponent { … }
Parent
Child
geildanke.com @fischaelameer
Data binding is a mechanism for coordinating what users see
with application data values.
geildanke.com @fischaelameer
<p>{{ talk.title }}</p><p [textContent]="talk.title"></p>
Component
View
Metadata
geildanke.com @fischaelameer
<img [attr.src]="imageSource">
<p [class.hidden]="isHidden"></p>
<p [style.color]="currentColor"></p>
Property Bindings
geildanke.com @fischaelameer
Component
View
Metadata Interpolation Property BindingsEvent Bindings
geildanke.com @fischaelameer
<button (click)="onDelete()">Delete</button>
<talk-cmp (talkDeleted)="deleteTalk()"></talk-cpm>
Event Binding
geildanke.com @fischaelameer
Component
View
Metadata Interpolation Property Binding
Event Binding
@Output @Input
[(ngModel)]
geildanke.com @fischaelameer
<input [(ngModel)]="talk.name"/><p>{{ talk.name }}</p>
<input [ngModel]="talk.name" (ngModelChange)="talk.name = $event">
Two-Way Data-Binding
geildanke.com @fischaelameer
Templates display data and consume user events
with the help of data binding.
geildanke.com @fischaelameer
<p [style.color]="currentColor">Hello!</p>
<p [ngStyle]="{ fontWeight: 900, color: currentColor }">Big Hello!</p>
<p [ngStyle]="setStyles()">Bigger Hello!</p>
NgStyle
geildanke.com @fischaelameer
<p [class.hidden]="isHidden">Hello?</p>
<p [ngClass]="{ active: isActive, hidden: isHidden }">Hello??</p>
<p [ngClass]="setClasses()">Hello???</p>
NgClass
geildanke.com @fischaelameer
<p *ngFor="let talk of talks">{{ talk.name }}</p>
<talk-cmp *ngFor="let talk of talks"></talk-cmp>
NgFor
<talk-cmp *ngFor="let talk of talks; let i=index" (talkDeleted)="deleteTalk(talk, i)"></talk-cmp>
geildanke.com @fischaelameer
<h2 *ngIf="talks.length > 0"><Talks:</h2>
NgIf
<h2 [style.display]="hasTalks ? 'block' : 'none'">Talks:</h2>
geildanke.com @fischaelameer
<div [ngSwitch]="talksCount"> <h2 *ngSwitchWhen="0">No talks available.</h2> <h2 *ngSwitchWhen="1">Talk:</h2> <h2 *ngSwitchDefault>Talks:</h2></div>
NgSwitch
geildanke.com @fischaelameer
<input #talk placeholder="Add a talk"><button (click)="addTalk(talk.value)">Add talk</button>
Template Reference Variables
geildanke.com @fischaelameer
A service is typically a class with a narrow, well-defined purpose.
geildanke.com @fischaelameer
export class TalkService {
private talks : String[] = [];
getTalks() { … } setTalk( talk : String ) { … }
}
talk.service.ts:
geildanke.com @fischaelameer
Angular's dependency injection system creates and delivers
dependent services "just-in-time".
geildanke.com @fischaelameer
EnterjsAppComponent
YetAnotherServiceAnotherServiceTalkService
Injector
geildanke.com @fischaelameer
import { Component } from '@angular/core';import { TalkService } from './bookmark.service';
@Component({ selector: 'enterjs-app', templateUrl: 'enterjs.component.html', providers: [ TalkService ]})
export class EnterjsAppComponent {
constructor( private talkService : TalkService ) {}
…
}
geildanke.com @fischaelameer
Root Injector
Injector InjectorInjector
Injector
Injector
Injector
Injector
geildanke.com @fischaelameer
import { Injectable } from 'angular2/core';import { Http } from 'angular2/http';
@Injectable()
export class TalkService {
constructor( private http: Http ) {}
…
}
talk.service.ts:
geildanke.com @fischaelameer
Components Data-Binding
Template-Syntax Services
Dependency Injection Pipes
…
geildanke.com @fischaelameer
Pipes transform displayed values within a template.
geildanke.com @fischaelameer
<p>{{ 'Hello EnterJS' | uppercase }}</p><!--> 'HELLO ENTERJS' </!-->
<p>{{ 'Hello EnterJS' | lowercase }}</p><!--> 'hello enterjs' </!-->
UpperCasePipe, LowerCasePipe
geildanke.com @fischaelameer
<p>{{ talkDate | date:'ddMMyyyy' }}</p><!--> '15.06.2016' </!-->
<p>{{ talkDate | date:'longDate' }}</p><!--> '15. Juni 2016' </!-->
<p>{{ talkDate | date:'HHmm' }}</p><!--> '12:30' </!-->
<p>{{ talkDate | date:'shortTime' }}</p><!--> '12:30 Uhr' </!-->
DatePipe
geildanke.com @fischaelameer
<p>{{ talkDate | date:'ddMMyyyy' }}</p><p>{{ talkDate | date:'dd-MM-yyyy' }}</p><p>{{ talkDate | date:'MM-dd-yyyy' }}</p>
<p>15.06.2016</p>
de-de
<p>06/15/2016</p>
en-us
geildanke.com @fischaelameer
<p>{{ 11.38 | currency:'EUR' }}</p><!--> 'EUR11.38' </!-->
<p>{{ 11.38 | currency:'USD' }}</p><!--> '$11.38' </!-->
<p>{{ 0.11 | percent }}</p><!--> '11%' </!-->
<p>{{ 0.38 | percent:'.2' }}</p><!--> '38.00%' </!-->
CurrencyPipe, PercentPipe
geildanke.com @fischaelameer
<p>{{ 'EnterJS' | slice:0:5 }}</p><!--> 'Enter' </!-->
<p>{{ talks | slice:0:1 | json }}</p><!--> [ { "name": "TalkName1" } ] </!-->
<p>{{ 1138 | number }}</p><!--> '1.138' </!-->
<p>{{ 1138 | number:'.2' }}</p><!--> '1.138.00' </!-->
NumberPipe, SlicePipe
geildanke.com @fischaelameer
<p>{{ talks }}</p><!--> [object Object] </!-->
<p>{{ talks | json }}</p><!--> [ { "name": "TalkName1" },{ "name": "TalkName2" } ] </!-->
<p>{{ talks | slice:0:1 | json }}</p><!--> [ { "name": "TalkName1" } ] </!-->
JsonPipe
geildanke.com @fischaelameer
import { Component } from 'angular2/core';
@Component({ selector: 'talk-cmp', template: '<p>{{ asyncTalk | async }}</p>'})
export class TalkComponent { asyncTalk: Promise<string> = new Promise( resolve => { window.setTimeout( () => resolve( 'No Talks' ), 1000 ); });}
AsyncPipe
geildanke.com @fischaelameer
import { PipeTransform, Pipe } from 'angular2/core';
@Pipe({name: 'ellipsis'})
export class EllipsisPipe implements PipeTransform {
transform( value ) { return value.substring( 0, 10 ) + '…'; }}
CustomPipe
geildanke.com @fischaelameer
Angular looks for changes to data-bound values through
a change detection process that runs after every JavaScript event.
geildanke.com @fischaelameer
Quelle: https://docs.google.com/presentation/d/1GII-DABSG5D7Yhik4Be5RvL6IXPt-Kg8lXFLnxkhKsU
geildanke.com @fischaelameer
An Angular form coordinates a set of data-bound user controls,
tracks changes, validates input, and presents errors.
geildanke.com @fischaelameer
Angular has the ability to bundle component styles with components
enabling a more modular design than regular stylesheets.
geildanke.com @fischaelameer
https://geildanke.com/ng2comet
@fischaelameer