ANGULAR 2 WORKSHOP. angular.cz

Podobné dokumenty
DEVFEST ANGULAR 2 WORKSHOP. angular.cz

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

Moderní webové aplikace AngularJS

Vývojařská Plzeň AngularJS

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

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

Michal Augustýn ALWIL Software Microsoft Most Valuable Professional

Proč Angular JS framework?

Vytvořte si vlastní webovou hru

Doxygen. Jakub Břečka

Michal Augustýn Microsoft Most Valuable Professional

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

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

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

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

CMS LARS VIVO VERZE 1.2 Z POHLEDU VIVOJÁŘE

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

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

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

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

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

Čipové karty Lekařská informatika

První kapitola úvod do problematiky

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

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

UJO Framework. revoluční architektura beans. verze

Algoritmizace a programování

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

Tvorba informačních systémů

Distribuované systémy a výpočty

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

ios Cvičení RSS čtečka

Tvorba informačních systémů

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

Tvorba informačních systémů

NSWI096 - INTERNET JavaScript

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

Programování v Javě I. Leden 2008

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

Reaktivní programování v.net

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

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

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

Úvod do programovacích jazyků (Java)

Apache Cordova (PhoneGap 3)

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

Dědění, polymorfismus

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

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

Automatizace správy linuxové infrastruktury pomocí Katello a Puppet LinuxDays

KIV/PIA 2013 Jan Tichava

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.

Technologie JavaBeans

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

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

Jazyk C# (seminář 6)

RMI Remote Method Invocation

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

JavaServer Faces Zdeněk Troníček

Komponenty v.net. Obsah přednášky

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

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

Začínáme s vývojem pro Android

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

David Bednárek Jakub Yaghob Filip Zavoral.

Aplikace s grafickým uživatelským rozhraním

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

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

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

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

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

HMI * nad webovými technologiemi

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

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

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

Java - řazení objektů

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

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

Základy objektové orientace I. Únor 2010

Zápis programu v jazyce C#

Geis Point SOAP WebServices Interface

10 Generické implementace

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

WPA - Konfigurace Java EE aplikace (Maven, struktura war arch. kontejnerem Tomcat 8

Tvorba informačních systémů

JAVA JavaBeans Java, letní semestr 2018

Cvičení z programování v C++ ZS 2016/2017 Přemysl Čech

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

Abstraktní datové typy: zásobník

Integrace OpenOffice.org a Javy. CZJUG, , Robert Vojta

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

Vytváření a použití knihoven tříd

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

7 Jazyk UML (Unified Modeling Language)

Java a XML. 10/26/09 1/7 Java a XML

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

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

Jazyk C++ I. Šablony

Jakub Čermák Microsoft Student Partner

Transkript:

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

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

angular.cz/gdg-brno-a2 0-2

JAK TO BUDE PROBÍHAT 0-3 povídání cvičení ukázka přestávka 3x po cca hodině

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 function area(r: number): number { return Math.PI * r * r; 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 @enablelogging class Calculator { function enablelogging(target) { target.loggingenable = true; const calculator = new Calculator(); calculator.loggingenable // true můžete dekorovat i vlastnosti a metody

Angular CLI 1-11 O ciální devstack od autorů Angularu Instalace npm install -g @angular/cli Vytvoření nové aplikace ng new my-new-application... cd my-new-application ng serve

Angular CLI 1-12 build ng build ng build --prod scaffolding ng generate... Test, Lint, Format

Struktura aplikace 1-13 Angular staví aplikaci jako strom komponent

1-14

1-15

1-16

1-17

1-18

1-19

Struktura aplikace 1-20 Angular staví aplikaci jako strom komponent app-root app-task-list app-task-detail app-task-info app-task-actions

Komponenta 1-21 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-22 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-23 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 / property binding 1-24 <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-25 @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>

Angular CLI 1-26 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

Vyzkoušejte si to 1-27

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> <!-- www.app.cz/tasks --> <a [routerlink]="['task', task.id]">detail</a> <!-- www.app.cz/task/42 -->

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);......

Observable vs Promise 2-11 function onsearch(text) { let url = '/api/?q=' + text; getdatafrom(url).then(function(response){ showdata(response.data); ).catch(function (error) { // Handle error )

Observable vs Promise 2-12

Observable vs Promise 2-13 let search = new Subject().map(text => '/api/?q=' + text).flatmap(url => getdatafrom(url)).subscribe((response) => { showdata(response.data); ); function onsearch(text) { return search.next(text);

Observable + subscribe 2-14 @Component({... ) export class SomeComponent implements OnInit { task: Task; ngoninit() { this.taskdataservice.getmaintask().subscribe(task => this.task = task); {{ title

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

Observable + async pipe 2-16 @Component({... ) export class SomeComponent implements OnInit { tasks: Observable<Tasks[]>; ngoninit() { this.tasks = this.taskdataservice.gettasks(); <ul> <li *ngfor="let task of tasks async"> {{task.title </li><li> </li></ul>

Vyzkoušejte si to 2-17

PART 3 - BONUS 3-0

Angular 2 Forms 3-1 template based - FormsModule podobné jako v Angular 1 reactive - modul ReactiveFormsModule 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. reactivex.io/documentation/operators/ atmap.html

RxJS.startWith 3-6 rxmarbles.com

RxJS.debounce 3-7 rxmarbles.com

RxJS.distinctUntilChanged 3-8 rxmarbles.com a mnoho dalších - reactivex.io/rxjs/manual/overview.html#categories-of-operators

Vyzkoušejte si to 3-9

angular.cz/gdg-brno-a2 4-0