Letztes Wochenende waren Danny Koppenhagen, Ferdinand Malcher, Gregor Woiwode und ich Teilnehmer des Developer Open Space 2015.
Per Live-Coding mit Pair-Programming haben Gregor und ich einen Schnellstart in das neue Framework gegeben: TypeScript, Komponenten, Dekoratoren, Bindings, Events, Formularverarbeitung und Datenfluss in einer NG2-App. In 45 Minuten stand die erste Single-Page-App. Im Anschluss an die tolle Session möchte ich hier noch einmal alle Infos zusammen tragen.
Die didaktisch aufgebauten Folien findest du hier auf Slideshare, Links, Downloads und das Video findest du auf http://blog.johanneshoppe.de/2015/10/angular2-einfuehrung-schnellstart/.
11. BookRating
Komponente soll zunächst nur ein Array<string> darstellen
// bookrating.ts
import {Component, View} from 'angular2/angular2';
@Component({
selector: 'bookrating'
})
@View({
directives: [], // later: BookComponent, NgFor
template: `
<h1>Bücher</h1>
<p>{{ books }}</p>
`
})
export default class BookRating {
books: Array<string>;
constructor() {
this.books = ['Angular 2', 'Aurelia'];
}
}
Neu: Dekoratoren
12. Laden der App
bootstrap der ersten Start-Komponente
// app.ts
import { bootstrap } from 'angular2/angular2';
import BookRating from './components/bookrating';
bootstrap(BookRating);
16. BookComponent
Komponente soll ein einzelnes Buch anzeigen
// bookcomponent.ts
import { Component, View } from 'angular2/angular2';
import Book from '../models/book';
@Component({
selector: 'book',
inputs: ['book'] // < input!
})
@View({
template: `
<div class="well">
<div class="thumbnail pullright">
<img src="//gravatar.com/avatar/__BEWERTUNG__?s=80&default=wavatar"/>
</div>
<h2>__TITEL__ <small>Stars __BEWERTUNG__</small></h2>
<p>__KOMMENTAR__</p>
</div>
`
})
export default class BookComponent {
book: Book;
}
17. Template Binding
Interpolation: Daten können via {{ }} gebunden werden
<! bookcomponent.ts >
<img src="//gravatar.com/avatar/{{ book.rating }}?s=80&default=wavatar"
<h2>{{ book.title }} <small>Stars {{ book.rating }}</small></h2>
<p>{{ book.comment }}</p>
18. BookRating
Komponente soll zunächst nur ein einziges Buch anzeigen
// bookrating.ts
import {Component, View, NgFor} from 'angular2/angular2';
import Book from '../models/book';
import BookComponent from './bookcomponent';
@Component({
selector: 'bookrating'
})
@View({
directives: [BookComponent, NgFor],
template: `
<h1>Buch</h1>
<book [book]="book"></book>
`
})
export default class BookRating {
//books: Array<Book>;
book: Book;
constructor() {
this.book = new Book('Angular 2', 'Eine praktische Einführung');
}
}
BookRating importiert BookComponent
19. [Property bindings]
Ziel: inputs der gebundenen Komponente
Property bindings sind durch [] gekennzeichnet
<book [book]="book" *ngfor="#book of books"></book>
22. Referenzvariablen
Mit einer # kann man eine Referenz initialisieren
<div><input name="title" #title></div>
Vergleichbar mit ng‐model aus AngularJS 1.x