DEVFEST ANGULAR 2 WORKSHOP. angular.cz

Podobné dokumenty
ANGULAR 2 WORKSHOP. angular.cz

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Vývojařská Plzeň AngularJS

Moderní webové aplikace AngularJS

Michal Augustýn Microsoft Most Valuable Professional

Michal Augustýn ALWIL Software Microsoft Most Valuable Professional

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

NA CO SI DÁT POZOR V JAVASCRIPTU? Angular.cz

Proč Angular JS framework?

Vytvořte si vlastní webovou hru

Distribuované systémy a výpočty

Internet cvičení. ZS 2009/10, Cvičení 3., Tomáš Pop. DISTRIBUTED SYSTEMS RESEARCH GROUP

GWT pro pokročilé. MoroSystems, s.r.o. Pavel Klobása. Senior Java Developer.

Tvorba informačních systémů

OMO Patterny pro UI. Základy UI - HTML, DOM, JavaScript, CSS. Single Page Application

Doxygen. Jakub Břečka

Ember.js. Jan Kopřiva, Vojtěch Jasný

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Formuláře. Internetové publikování. Formuláře - příklad

Tvorba informačních systémů

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Internet cvičení. ZS 2009/10, Cvičení 4., PHP. Tomáš Pop. DISTRIBUTED SYSTEMS RESEARCH GROUP

Jini (pronounced GEE-nee) Cvičení 8 - DS 2006

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Reaktivní programování v.net

Tvorba informačních systémů

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

CMS LARS VIVO VERZE 1.2 Z POHLEDU VIVOJÁŘE

AngularJS. framework pro moderní webové aplikace. 24.března CZJUG Brno. Milan Víťa

Úvod do programovacích jazyků (Java)

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Routery Turris a jejich ekosystém I

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

HMI * nad webovými technologiemi

Čipové karty Lekařská informatika

Jazyk C# (seminář 6)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Návrh softwarových systém. Návrh softwarových systémů

Tvorba informačních systémů

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

JavaScript 101. "Trocha života do statických stránek"

UJO Framework. revoluční architektura beans. verze


Geis Point SOAP WebServices Interface

Programování v Javě I. Leden 2008

Algoritmizace a programování

JavaServer Faces Zdeněk Troníček

Django, 2. cvičení url, views, templates. Úvod

GUI. JavaFX. Java UI, letní semestr 2017/2018 1

Kurz Databáze. Přechod na SQL server. Obsah. Vytvoření databáze. Lektor: Doc. Ing. Radim Farana, CSc.

Skriptovací jazyky. Obsah

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Java - řazení objektů

Distribuované systémy a výpočty

Stručný úvod pro programátory. Michal Kuchta

ios Cvičení RSS čtečka

Dokumentový sklad. Dokumentový sklad v.1. Dokumentový sklad v.2. Koncepce skladu v.2. Petr Lampa

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

RMI - Distribuované objekty v Javě

OMO Patterny pro UI. Základy UI - HTML, DOM, JavaScript, CSS. Single Page Application

Dědění, polymorfismus

První kapitola úvod do problematiky

Programování v Javě I. Únor 2009

KIV/PIA 2013 Jan Tichava

CoffeeScript JavaScript, který se dá číst. I psát. Jan

1. Distribuce Javy. 2. Vlastnosti J2EE aplikace. 3. Fyzická architektura J2EE aplikace. Distribuce Javy se liší podle jejího zamýšleného použití:

Postup. Úvodem. Hlavní myšlenka frameworku. application. system. assets. uploads

Tvorba informačních systémů

Integrovaný agent obchodníka elektronického obchodu (IMA) Příručka správce

NSWI096 - INTERNET JavaScript

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

OSGi. Aplikační programování v Javě (BI-APJ) - 6 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Jaku b Su ch ý 1

BIRD Internet Routing Daemon

API pro volání služby kurzovního lístku KB

Microsoft ASP.NET 2.0/3.0 (advanced)

MVVM pro desktop i web

Základy Guice Vazby Scopes. Google Guice. základní seznámení s frameworkem Google Guice

Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Formuláře. Internetové publikování

NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze

Téma 5. Ovladače přístrojů Instrument Drivers (ID)

ISZR Referenční agent.net

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Bottle -- příklad. Databáze. Testovací data. id Jedinečný identifikátor řádku: Bude typu INT s AUTO_INCREMENT a nastavíme ho jako primární klíč

Pear - hruška Systém pro implementaci a distribuci znovupoužitelných komponent (v PHP) Strukturovaná knihovna open-source (PHP) skriptů Systém pro dis

PB161 Programování v jazyce C++ Přednáška 10

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Nastavení komunikace mezi Productivity2000 a měničem MOVIDRIVE MDX61B

Radek Krej í. NETCONF a YANG NETCONF. 29. listopadu 2014 Praha, IT 14.2

Základy objektové orientace I. Únor 2010

Zápis programu v jazyce C#

Programování v jazyce JavaScript

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Transkript:

DEVFEST 2016 - ANGULAR 2 WORKSHOP Milan Lempera @milanlempera Víťa Plšek @vitaplsek Matěj Horák @horakmat angular.cz

O nás 0 1 Milan Lempera @milanlempera php, javascript, clojure(script) Víťa Plšek @vitaplsek java, javascript angular.cz

O nás 0 2 Matěj Horák @horakmat java, javascript Víťa Plšek @vitaplsek java, javascript

ANGULAR.CZ/DEVFEST-2016 0 3

PART 1 1 0

Angular JS 1 1 Angular 1.X since 2009 Angular 2 since 2016

1 2

1 3

JavaScript vs TypeScript 1 4 function area(r) { return Math.PI * r * r; let mynumber = 2; let mystring = '2' function area(r: number): number { return Math.PI * r * r; let mynumber = 2; let mystring = '2' area(mynumber); area(mystring); // Ok // Ok area(mynumber); area(mystring); // Ok // ERROR

Arrow functions 1 5 let area = r => Math.PI * r * r; let area = (r: number) => Math.PI * r * r;

TypeScript 1 6 let mynumber = 2; // typ bude odvozen let othernumber:number = 2; mynumber = 'somestring'; othernumber = 'somestring'; // ERROR // ERROR // definice typů pole let arrayofnumbers: number[]; // generika let numbers: Set<number> = new Set(); numbers.add(1); numbers.add("a"); // OK // ERROR

TypeScript - Class 1 7 class Greeter { private message: string; constructor(message: string) { this.message = message; greet() { return "Hello, " + this.message; let greeter = new Greeter("world");

TypeScript - Class 1 8 class Greeter { constructor(private message: string) { greet() { return "Hello, " + this.message; let greeter = new Greeter("world");

TypeScript - Interface 1 9 interface Speaker { id?: number; name: string; "structural subtyping" / "duck typing" záleží jen na struktuře objektu let speaker1: Speaker = { // OK id: 1, name: 'Petr Novák' ; let speaker2: Speaker = { // OK - id není povinné name: 'Petr', surname: 'Novák' ; let speaker3: Speaker = { // ERROR - neobsahuje name id: 11, surname: 'Novák' ;

TypeScript - Dekorátory 1 10 function enablelogging(target) { target.loggingenable = true; @enablelogging class Calculator { const calculator = new Calculator(); calculator.loggingenable // true můžete dekorovat i vlastnos a metody

Struktura aplikace 1 11 Angular staví aplikaci jako strom komponent app root app task list app task detail app task info app task ac ons

Angular CLI 1 12 devstack scafolding Vygenerování komponenty ng generate component tasks/task-list installing component create src/app/tasks/task-list/task-list.component.css create src/app/tasks/task-list/task-list.component.html create src/app/tasks/task-list/task-list.component.spec.ts create src/app/tasks/task-list/task-list.component.ts

Komponenta 1 13 import { Component, OnInit from '@angular/core'; @Component({ selector: 'app-task-list', templateurl: './task-list.component.html', styleurls: ['./task-list.component.css'] ) export class TaskListComponent implements OnInit { constructor() { ngoninit() { Použití komponenty v šabloně <app-task-list></app-task-list>

Attributy a metody komponenty 1 14 import { Component, OnInit from '@angular/core'; import { Task from './task'; @Component({ selector: 'app-task-list', templateurl: './task-list.component.html', styleurls: ['./task-list.component.css'] ) export class TaskListComponent implements OnInit { tasks: Task[]; selectedtask: Task; gettotalestimation() { return......

Šablona komponenty 1 15 Interpolace <h1>{{selectedtask.title</h1> <span>total Estimation: {{gettotalestimation()</span> Cykly, podmínky <ul> <li *ngfor="let task of tasks"> </li> </ul> {{task.title <span *ngif="task.isoverdue">overdue!</span>

Event binding 1 16 <button type="button" (click)="upvote(task)">vote</button> <span [class]="task.type"></span> <input type="text" [(ngmodel)]="task.title" /> Také u vlastních komponent <app-task-list [tasks]="overduetasks" (onupvote)="votefortask($event)"> </app-task-list>

Rozhraní komponenty 1 17 @Component({ selector: 'app-task-list', templateurl: './task-list.component.html', styleurls: ['./task-list.component.css'] ) export class TaskListComponent implements OnInit { @Input() tasks: Task[]; @Output() onupvote = new EventEmitter<Task>(); upvote(task) { this.onupvote.emit(task);... <app-task-list [tasks]="overduetasks" (onupvote)="votefortask($event)"> </app-task-list>

Vyzkoušejte si to 1 18

PART 2 2 0

Moduly 2 1 Moduly vystavují komponenty a udávají závislost na jiné moduly @NgModule({ declarations: [ AppComponent, TaskDetailComponent, TaskListComponent, Error404Component ], imports: [ BrowserModule, HttpModule, ], bootstrap: [AppComponent] ) export class AppModule {

Routing 2 2 transparentní chování aplikace v prostředí webu stav a URL adresa jsou vzájemně provázané historie (vpřed, zpět) možnost poslat/uložit URL

Router Module 2 3 RouterModule.forRoot([ {path: '', component: TaskListComponent, {path: 'task/:id', component: TaskDetailComponent, {path: '**', component: Error404Component ] ) Vykreslení v šabloně <html> <head> </head> <body> <router-outlet></router-outlet> </body> </html>

Moduly a routing 2 4 @NgModule({ imports: [ RouterModule.forRoot([ {path: '', component: TaskListComponent, {path: 'task/:id', component: TaskDetailComponent, {path: '**', component: Error404Component ] ) ], exports: [ RouterModule ] ) export class AppRoutingModule {

Moduly a routing 2 5 @NgModule({ declarations: [ AppComponent, TaskDetailComponent, TaskListComponent, Error404Component ], imports: [ BrowserModule, HttpModule, AppRoutingModule ], // routing modul bootstrap: [AppComponent] ) export class AppModule {

Přechod mezi routami 2 6 <a routerlink="/tasks">seznam</a> <a [routerlink]="['task', task.id]">detail</a>

Injectables 2 7 import { Task from "./task"; import { Injectable from "@angular/core"; @Injectable() export class TaskDataService { gettasks(): Task[]{...

Začlenení do modulu 2 8 @NgModule({ declarations: [ AppComponent, TaskDetailComponent, TaskListComponent, Error404Component ], imports: [ BrowserModule, HttpModule, AppRoutingModule ], providers: [TaskDataService], // injektovatelná závislost bootstrap: [AppComponent] ) export class AppModule {

Injektáž do komponenty 2 9 export class TaskListComponent implements OnInit { constructor(private taskdataservice: TaskDataService) { ngoninit(): void { this.tasks = this.taskdataservice.gettasks();...

Získání parametrů routy 2 10 export class TaskDetailComponent implements OnInit { constructor(private route: ActivatedRoute) { ngoninit(): void { let idparam = this.route.snapshot.params['id']; let id = parseint(idparam);......

Asynchronní data 2 11 function onsearch(text) { onsearch('abc') let url = '/api/?q=' + text; $http.get(url).then(function(response) { showdata(response.data); ); then httppromise showdata(response.data) then Server

Asynchronní data 2 12 let search = new Subject().map((text) => '/api/?q=' + text).flatmap((url) => $http.get(url)).subscribe((response) { showdata(response.data); ) function onsearch(text) { search text -> url url -> promise -> response onsearch('abc') abc /api/?q=abc onsearch('def') def Request Response return search.next(text); response -> showdata(response.data)

Observable + subscribe 2 13 @Component({... ) export class SomeComponent implements OnInit { titleobservable: Observable<string>; title: string; ngoninit() { this.titleobservable.subscribe((title) => this.title = title); {{ title

Pipe 2 14 @Component({... ) export class SomeComponent { title: string = "Angular" {{ title -> Angular {{ title uppercase -> ANGULAR vestavěné: date, uppercase, lowercase, currency, percent, async

Observable + async pipe 2 15 @Component({... ) export class SomeComponent implements OnInit { titleobservable: Observable<string>; {{ titleobservable async

Vyzkoušejte si to 2 16

PART 3 - BONUS 3 0

Angular 2 Forms 3 1 template based podobné jako v Angular 1 reac ve změny data jako Observable

Angular 2 Reactive Forms 3 2 @Component() export class SearchComponent implements OnInit { searchcontrol = new FormControl(); ngoninit() { this.searchcontrol.valuechanges.subscribe(value => { // do something with value here ); <input type="search" [formcontrol]="seachcontrol">

Observables - operátory 3 3

RxJS.map 3 4 rxmarbles.com

RxJS.flatMap 3 5 Podobné jako map, ale místo Observable/Promise vrací rovnou hodnoty, nemusíte tedy zanořovat subscribe/then v map. reac vex.io/documenta on/operators/flatmap.html

RxJS.startWith 3 6 rxmarbles.com

RxJS.debounce 3 7 rxmarbles.com

RxJS.distinctUntilChanged 3 8 a mnoho dalších reac vex.io/rxjs/manual/overview.html#categories ofoperators rxmarbles.com

Vyzkoušejte si to 3 9

ANGULAR.CZ/DEVFEST-2016 4 0