際際滷

際際滷Share a Scribd company logo
Angular 4 pragmatycznie
Kwestie techniczne
organizacja szkolenia
 Prowadzcy szkolenie
 Tomasz Sukowski
 Trener IT
 FrontEnd Engineer
 Cel i plan szkolenia
 Obowizki bie甜ce
 Pytania, dyskusje, potrzeby
 Elastyczno zagadnie
鰻温姻噛糸噛庄温
"Node Package Manager"
 system zarzdzania zale甜nociami dla油server-side js i client-side js
 zale甜noci opisywane z dokadnoci do油wersji w油pliku package.json 
(nowy projekt tworzymy poleceniem npm init)
 npm install
- instaluje pakiety, kt坦rych jeszcze nie ma w projekcie
 npm update 
- sprawdza, czy istniej nowsze wersje pakiet坦w i instaluje
 npm install nazwa-pakietu --save lub --save-dev 
- instaluje pakiet, dodaje go do package.json
przydatne skr坦ty: 
npm init -y , npm i -S , npm i -D
ECMAScript 6
ECMAScript 2015
ECMAScript 2015
 Kolejna (po ECMAScript 5) wersja standardu JavaScript
 Najwiksze dotychczas rozwinicie tego jzyka
 Od 2015 aktualizacje standardu bd wydawane co油roku
 ECMAScript 2016 jest znacznie mniejsz ewolucj
 5 etap坦w do implementacji propozycji:

Strawman (0) > Proposal (1) > Draft (2) > Candidate (3) > Finished (4)
ES2015 - wsparcie
http://kangax.github.io/compat-table/es6
ES2015 - narzdzia
 Kod ECMAScript 2015 mo甜emy transpilowa
dla油starszych przegldarek
 Do wyboru: Traceur, TypeScript, Babel
 Warto:
 szybki rozw坦j js, wicej mo甜liwoci ju甜 dzi, mniej
boilerplate code, ...
 Transpilers are here to stay
ES2015 - arrow functions
// Domylnie - zwraca wyra甜enie
var odds = myArr.map(v => v + 1);
var nums = myArr.map((v, i) => v + i);
var pairs = myArr.map(v => ({even: v, odd: v + 1}));
// Deklaracje umieszczamy w klamrach
nums.forEach(v => {
if (v % 5 === 0) fives.push(v);
});
// Leksykalne this
var bob = {
_name: "Bob",
_friends: [],
printFriends() {
this._friends.forEach(f =>
console.log(this._name + " knows " + f));
}
}
ES2015 - klasy
class Student extends Person {
constructor(name, age, major) {
super(name, age);
this.major = major;
}
greet(greeting) {
console.log(greeting, this.name);
}
get year() {
return (new Date()).getFullYear() - this.age;
}
set age(age) {
this.age = parseInt(age);
}
static defaultAge() {
return 18;
}
ES2015 - let, const
function f() {
let x;
{
// let i const maj zasig blokowy
const x = "sneaky";
// const nie mo甜e zmieni referencji
x = "foo";
}
// bd, nie mo甜na ponownie zdefiniowa
let x = "inner";
}
ES2015 - moduy
// lib/math.js
export function sum(x, y) {
return x + y;
}
export var pi = 3.141593;
export default var name = "Math module";
// app.js
import * as math from "lib/math";
alert("2 = " + math.sum(math.pi, math.pi));
// otherApp.js
import name from "lib/math";
import {sum, pi} from "lib/math";
alert("2 = " + sum(pi, pi));
TypeScript
TypeScript
 Superset ECMAScrtipt 2015
  z elementami ES2016 i 2017
  oraz z silnym typowaniem
 Konieczna jest transpilacja (do ES2015, ES5 lub ES3)
 Bdy w typach wyapywane na etapie kompilacji i przez IDE
 Instalacja: npm i -g typescript
 Kompilacja: tsc my-app.ts
 Linting: npm i -D tslint
TypeScript: u甜ycie z bibliotekami js
 Mo甜emy korzysta z zewntrznych bibliotek bez potrzeby
ich mody鍖kacji
 Potrzebujemy de鍖nicji ich interfejs坦w
 Przechowujemy je w plikach *.d.ts
 Publikowane pliki de鍖nicji dla popularnych bibliotek
instalujemy za pomoc npm
TypeScript: typy
typ: przykadowe wartoci:
boolean true, false
number liczby, Infinity, NaN
string znaki, cigi znak坦w
[] tablice innych typ坦w, np. number[], boolean[]
{} obiekt
undefined nie zde鍖niowany
TypeScript: typy
typ: przykadowe wartoci:
enum wylistowanie, np. { Admin, Publisher, User }
any dowolny typ
void nic
-
w przypadku braku okrelenia typu,
TypeScript油mo甜e si go "domyli" (type inference)
TypeScript: klasy
class Person {
dateOfBirth: number; // publiczna wasno
private verified: boolean; // prywatna wasno
constructor(
name: string, // definicja parametru
public city: string, // i publicznej wasnoci
age?: number // parametr opcjonalny
) {
/* ... */
}
}
Angular 4
珂看糸顎霞
@NgModule
 Narzdzie do organizacji struktury aplikacji
 Zawieraj powizane ze sob komponenty, dyrektywy i pipes
 Wszystkie podstawowe funkcjonalnoci Angulara s zawarte
w油moduach (FormsModule, HttpModule, RouterModule)
 Mog by lazy- lub eager loaded
 Aplikacja zawiera jeden g坦wny modu, kt坦ry su甜y do jej
wystartowania (bootstrap) i importuje pozostae moduy
 Deklarujemy jako klas z dekoratorem @NgModule
@NgModule
interface NgModule {
providers : Provider[]
lista usug dostpnych w danym module
declarations : Array<Type<any>|any[]>
lista komponent坦w, dyrektyw i pipes dostpnych w danym module
exports : Array<Type<any>|any[]>
lista komponent坦w, dyrektyw i pipes, kt坦re modu udostpnia na zewntrz
imports : Array<Type<any>|ModuleWithProviders|any[]>
lista innych modu坦w, kt坦re eksportuj potrzne nam rzeczy
bootstrap : Array<Type<any>|any[]>
root component moduu - g坦wny komponent g坦wnego moduu
}
Bootstrapping the app
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { platformBrowserDynamic } 
from '@angular/platform-browser-dynamic';
@NgModule({
imports: [ BrowserModule ]
})
export class AppModule { }
const platform = platformBrowserDynamic();
platform.bootstrapModule(AppModule);
Komponenty
"Komponent kontroluje wycinek obszaru ekranu,
kt坦ry油mo甜emy nazwa widokiem i de鍖niuje
reu甜ywalne bloki skadowe UI w aplikacji."
 Podstawowa koncepcja aplikacji w Angular 2
 Caa aplikacja jest drzewem komponent坦w
TodoApp
TodoApp
TodoForm
TodoItem
TodoItem
TodoItem
Komponent
import { Component } from '@angular/core';
@Component({
selector: 'my-component',
template: `<div>Hello my name is {{name}}.
<button (click)="greet()">Greet</button></div>`
})
export class MyComponent {
constructor() {
this.name = 'Max'
}
greet() {
console.log('My name is', this.name)
}
}
@Component({
selector: 'todo-input',
template: '...'
})
export class Hello {
@Input() item: MyTodoType;
}
// lub:
@Component({
selector: 'todo-input',
inputs: ['item'],
template: '...'
})
export class Hello {
item: MyTodoType;
}
Komponent: komunikacja "do"
// przekazywanie przez zmienn:
<todo-input [item]="myItem"></todo-input>
// przekazywanie wartoci bezporednio
<todo-input item="Kupi chleb"></todo-input>
Komponent: komunikacja "z" - zdarzenia
<todo-input (completed)="saveProgress(item)"></todo-input>
// alternatywna skadnia - dlatego nie prefixujemy zdarze "on"
<todo-input on-completed="saveProgress(item)"></todo-input>
// lub:
@Component({
selector: 'todo-input',
outputs: ['completed'],
....
@Component({
selector: 'todo-input',
template: '...'
})
export class Hello {
@Output() completed:
EventEmitter<boolean> = new EventEmitter<boolean>();
}
Komponent: komunikacja w obie strony
<input [ngModel]="name" (ngModelChange)="name=$event">
// Skr坦cony zapis:
<input [(ngModel)]="name">
 Poczenie komunikacji "z" i "do"
 Wykorzystujemy do tego dyrektyw ngModel
[(ngModel)]
U甜ywanie komponent坦w
 Aby m坦c wykorzysta komponent w szablonie innego
komponentu, nale甜y doda go do listy u甜ywanych dyrektyw
 a w celu u甜ycia w innych moduach - wyeksportowa
@NgModule({
declarations: [
TodoInputComponent,
TodoListComponent,
TodoComponent
],
imports: [ ],
exports: [ TodoComponent ]
})
class MySharedModule {}
Dyrektywy
@Directive
 Dyrektywa mody鍖kuje DOM* zmieniajc jego wygld
lub油zachowanie
 W Angular wyr坦甜niamy 3 rodzaje dyrektyw:
1. Komponenty - dyrektywy z szablonami
2. Dyrektywy atrybutowe - zmieniaj zachowanie 
komponentu/elementu ale nie wpywaj na jego szablon
3. Dyrektywy strukturalne - zmieniaj zachowanie 
komponentu/elementu przez mody鍖kacj jego szablonu
Dyrektywy atrybutowe
<div [ngStyle]="{'font-size': mySize+'px'}">...</div>
<div [ngStyle]="{'font-size.px': mySize}">...</div>
<div [ngStyle]="myStyle">...</div>
 ngStyle:
<div [ngClass]="'first second'">...</div>
<div [ngClass]="['first', 'second']">...</div>
<div [ngClass]="{first: true, second: -1, third: 0}">...
 ngClass:
Dyrektywy strukturalne
<template [ngIf]="condition">
<div>{{ hero }}</div>
</template>
 Su甜 do mody鍖kacji struktury DOM 
- dodawania i usuwania element坦w
// Skr坦cony zapis:
<div *ngIf="completed">  </div>
Dyrektywy strukturalne
<div *ngFor="let item of todoList; let i = index"> ... </div>
 Wbudowane dyrektywy strukturalne:
<div *ngIf="completed">  </div>
<div [ngSwitch]="item.status">
<p *ngSwitchCase="'completed'"> Completed <p>
<p *ngSwitchCase="'in-progress'"> Working on it <p>
<p *ngSwitchDefault="'in-progress'"> Working on it <p>
</div>
dostpne wartoci: index, first, last, even, odd
雨壊顎乙庄
Wstrzykiwanie zale甜noci
Klas rozszerzon dekoratorem (np. @Injectable)
@Injectable()
class TodosService {
constructor() {}
}
class TodoItemComponent {
constructor(ts: TodosService) {} // skr坦cony zapis
// constructor(@Inject(TodosService) ts) {} // peen zapis
}
 i油zarejestrowan jako provider
 mo甜emy wstrzykn do konstruktor坦w innych klas
@NgModule({
providers: [
TodoService,
Wstrzykiwanie zale甜noci - Singletons?
 Domylnie mechanizm DI zwraca singletony
 Mo甜emy jednak utworzy wicej iniektor坦w
 Uzyskujc, analogicznie jak w przypadku komponent坦w, struktur
drzewiast
@Component({
providers: [Todos]
})
 Komponent, kt坦ry ma zde鍖niowane w ten spos坦b usugi,
nie油bdzie油szuka ich instancji wy甜ej w drzewie komponent坦w,
tylko powoa nowe
Routing
Routing: definicja
 Routing (dostpny z '@angular/router') dostarczamy do aplikacji
jako ModuleWithProviders
 Przekazujemy do niego tablic Route De鍖nition Object
export const routing: ModuleWithProviders =
RouterModule.forRoot(appRoutes);
const appRoutes = [
{path: '', component: HomePageComponent},
{path: 'users/:id', component: UserProfileComponent}
]
 gdzie tablica zawiera elementy opisane interfejsem Route
Routing: wywietlanie
 Komponent pasujcy do aktualnej cie甜ki zostanie zaadowany
wewntrz komponentu RouterOutlet
 Za generowanie adresu na potrzeby linku odpowiada dyrektywa
router-link
@Component({
selector: 'main-app',
template: `<main>
<a [routerLink]="['/Contact']"
routerLinkActive="active">Contact</a>
<div style="border: 1px solid black">
<router-outlet></router-outlet>
</div>
</main>`})
Angular 4 Style Guide
 Zestaw wskaz坦wek dotyczcych sposobu pisania aplikacji
w油Angular 4
 Styleguide dla AngularJS by rozwijany przez spoeczno i
dostpny na GitHubie
 Styleguide dla Angular 4 jest mocniej wspierany przez tw坦rc坦w
frameworka i dostpny w ramach o鍖cjalnej dokumentacji 
(https://angular.io/docs/ts/latest/guide/style-guide.html)
 Wikszo uwag to sugestie, warto przeanalizowa, czy
odpowiadaj naszym potrzebom

Zapoznaj si z ofert szkoleniow


Podczas naszych szkole:
- pracujemy w grupach 4-8 osobowych
- program mo甜e by dostosowany do oczekiwa grupy
- rozwizujemy i odpowiadamy na indywidualne pytania uczestnik坦w
- mamy du甜o wicej czasu :) 
Chcesz wiedzie wicej?

I odbierz na nie zni甜k w wysokoci 35%
 Angular 2 - budowanie nowoczesnych i wydajnych aplikacji
przegldarkowych
 Budowanie wydajnych i nowoczesnych aplikacji webowych w
oparciu o React, Flux i powizane technologie
 Efektywne tworzenie aplikacji webowych z wykorzystaniem
AngularJS, HTML5 i JavaScript
Wybierz jedno z poni甜szych szkole

More Related Content

What's hot (20)

Podstawy SEO w Drupalu 7 - Jarosaw Sobiecki
Podstawy SEO w Drupalu 7 - Jarosaw SobieckiPodstawy SEO w Drupalu 7 - Jarosaw Sobiecki
Podstawy SEO w Drupalu 7 - Jarosaw Sobiecki
Grzegorz Bartman
JavaScript, 珂看糸顎霞
JavaScript, 珂看糸顎霞JavaScript, 珂看糸顎霞
JavaScript, 珂看糸顎霞
Mariusz Nowak
Automatyzacja utrzymania jakoci w rodowisku PHP
Automatyzacja utrzymania jakoci w rodowisku PHPAutomatyzacja utrzymania jakoci w rodowisku PHP
Automatyzacja utrzymania jakoci w rodowisku PHP
Laravel Poland MeetUp
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosaw Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosaw SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosaw Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosaw Sobiecki
Grzegorz Bartman
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowujcej wpisy chatu
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowujcej wpisy chatuBazy danych w Drupalu 7. Przygotowanie tabeli przechowujcej wpisy chatu
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowujcej wpisy chatu
Grzegorz Bartman
Nowoci w drupal 9 i 10 [PL]
Nowoci w drupal 9 i 10 [PL]Nowoci w drupal 9 i 10 [PL]
Nowoci w drupal 9 i 10 [PL]
Droptica
REvolution, czyli o bardziej obiektowym podejciu w Railsach
REvolution, czyli o bardziej obiektowym podejciu w RailsachREvolution, czyli o bardziej obiektowym podejciu w Railsach
REvolution, czyli o bardziej obiektowym podejciu w Railsach
The Software House
Slawek Kluz - Ewolucja modelu danych w testach funkcjonalnych case study
Slawek Kluz - Ewolucja modelu danych w testach funkcjonalnych  case studySlawek Kluz - Ewolucja modelu danych w testach funkcjonalnych  case study
Slawek Kluz - Ewolucja modelu danych w testach funkcjonalnych case study
kraqa
Wzorce projektowe (w ASP.NET i nie tylko)
Wzorce projektowe (w ASP.NET i nie tylko)Wzorce projektowe (w ASP.NET i nie tylko)
Wzorce projektowe (w ASP.NET i nie tylko)
Bartlomiej Zass
DrupalDay Podstawy Drupal 8
DrupalDay Podstawy Drupal 8DrupalDay Podstawy Drupal 8
DrupalDay Podstawy Drupal 8
Grzegorz Bartman
Technologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreTechnologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT core
Sages
AngularJS szkolenie wewntrzne (into)
AngularJS szkolenie wewntrzne (into)AngularJS szkolenie wewntrzne (into)
AngularJS szkolenie wewntrzne (into)
Marcin Baran
Co nowego w VS 2013 dla programist坦w ASP.NET?
Co nowego w VS 2013 dla programist坦w ASP.NET?Co nowego w VS 2013 dla programist坦w ASP.NET?
Co nowego w VS 2013 dla programist坦w ASP.NET?
Bartlomiej Zass
NSOperation(Queue)
NSOperation(Queue) NSOperation(Queue)
NSOperation(Queue)
Krzysztof Profic
Micha Dec - Quality in Clouds
Micha Dec - Quality in CloudsMicha Dec - Quality in Clouds
Micha Dec - Quality in Clouds
kraqa
Optymalizacja aplikacji ASP.NET
Optymalizacja aplikacji ASP.NETOptymalizacja aplikacji ASP.NET
Optymalizacja aplikacji ASP.NET
Bartlomiej Zass
DrupalDay podstawy systemu Drupal (Wersja skr坦cona)
DrupalDay podstawy systemu Drupal (Wersja skr坦cona)DrupalDay podstawy systemu Drupal (Wersja skr坦cona)
DrupalDay podstawy systemu Drupal (Wersja skr坦cona)
Grzegorz Bartman
Struktura i wasnoci systemu zarzdzania treci Drupal
Struktura i wasnoci systemu zarzdzania treci DrupalStruktura i wasnoci systemu zarzdzania treci Drupal
Struktura i wasnoci systemu zarzdzania treci Drupal
Grzegorz Bartman
OSGi, deklaratywnie
OSGi, deklaratywnieOSGi, deklaratywnie
OSGi, deklaratywnie
Code-House
Podstawy SEO w Drupalu 7 - Jarosaw Sobiecki
Podstawy SEO w Drupalu 7 - Jarosaw SobieckiPodstawy SEO w Drupalu 7 - Jarosaw Sobiecki
Podstawy SEO w Drupalu 7 - Jarosaw Sobiecki
Grzegorz Bartman
JavaScript, 珂看糸顎霞
JavaScript, 珂看糸顎霞JavaScript, 珂看糸顎霞
JavaScript, 珂看糸顎霞
Mariusz Nowak
Automatyzacja utrzymania jakoci w rodowisku PHP
Automatyzacja utrzymania jakoci w rodowisku PHPAutomatyzacja utrzymania jakoci w rodowisku PHP
Automatyzacja utrzymania jakoci w rodowisku PHP
Laravel Poland MeetUp
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosaw Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosaw SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosaw Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosaw Sobiecki
Grzegorz Bartman
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowujcej wpisy chatu
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowujcej wpisy chatuBazy danych w Drupalu 7. Przygotowanie tabeli przechowujcej wpisy chatu
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowujcej wpisy chatu
Grzegorz Bartman
Nowoci w drupal 9 i 10 [PL]
Nowoci w drupal 9 i 10 [PL]Nowoci w drupal 9 i 10 [PL]
Nowoci w drupal 9 i 10 [PL]
Droptica
REvolution, czyli o bardziej obiektowym podejciu w Railsach
REvolution, czyli o bardziej obiektowym podejciu w RailsachREvolution, czyli o bardziej obiektowym podejciu w Railsach
REvolution, czyli o bardziej obiektowym podejciu w Railsach
The Software House
Slawek Kluz - Ewolucja modelu danych w testach funkcjonalnych case study
Slawek Kluz - Ewolucja modelu danych w testach funkcjonalnych  case studySlawek Kluz - Ewolucja modelu danych w testach funkcjonalnych  case study
Slawek Kluz - Ewolucja modelu danych w testach funkcjonalnych case study
kraqa
Wzorce projektowe (w ASP.NET i nie tylko)
Wzorce projektowe (w ASP.NET i nie tylko)Wzorce projektowe (w ASP.NET i nie tylko)
Wzorce projektowe (w ASP.NET i nie tylko)
Bartlomiej Zass
DrupalDay Podstawy Drupal 8
DrupalDay Podstawy Drupal 8DrupalDay Podstawy Drupal 8
DrupalDay Podstawy Drupal 8
Grzegorz Bartman
Technologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT coreTechnologia Xamarin i wprowadzenie do Windows IoT core
Technologia Xamarin i wprowadzenie do Windows IoT core
Sages
AngularJS szkolenie wewntrzne (into)
AngularJS szkolenie wewntrzne (into)AngularJS szkolenie wewntrzne (into)
AngularJS szkolenie wewntrzne (into)
Marcin Baran
Co nowego w VS 2013 dla programist坦w ASP.NET?
Co nowego w VS 2013 dla programist坦w ASP.NET?Co nowego w VS 2013 dla programist坦w ASP.NET?
Co nowego w VS 2013 dla programist坦w ASP.NET?
Bartlomiej Zass
Micha Dec - Quality in Clouds
Micha Dec - Quality in CloudsMicha Dec - Quality in Clouds
Micha Dec - Quality in Clouds
kraqa
Optymalizacja aplikacji ASP.NET
Optymalizacja aplikacji ASP.NETOptymalizacja aplikacji ASP.NET
Optymalizacja aplikacji ASP.NET
Bartlomiej Zass
DrupalDay podstawy systemu Drupal (Wersja skr坦cona)
DrupalDay podstawy systemu Drupal (Wersja skr坦cona)DrupalDay podstawy systemu Drupal (Wersja skr坦cona)
DrupalDay podstawy systemu Drupal (Wersja skr坦cona)
Grzegorz Bartman
Struktura i wasnoci systemu zarzdzania treci Drupal
Struktura i wasnoci systemu zarzdzania treci DrupalStruktura i wasnoci systemu zarzdzania treci Drupal
Struktura i wasnoci systemu zarzdzania treci Drupal
Grzegorz Bartman
OSGi, deklaratywnie
OSGi, deklaratywnieOSGi, deklaratywnie
OSGi, deklaratywnie
Code-House

Similar to Angular 4 pragmatycznie (20)

Bohater UI bez front end developera ?
Bohater UI bez front end developera ?Bohater UI bez front end developera ?
Bohater UI bez front end developera ?
Quick-Solution
agodne wprowadzenie do Angular2
agodne wprowadzenie do Angular2agodne wprowadzenie do Angular2
agodne wprowadzenie do Angular2
Jakub Nietrzeba
HYC - Angular sta si kanciastym
HYC - Angular sta si kanciastymHYC - Angular sta si kanciastym
HYC - Angular sta si kanciastym
Dariusz Jagieo
Code driven development w Drupalu 7 | DrupalCamp Wrocaw 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocaw 2014Code driven development w Drupalu 7 | DrupalCamp Wrocaw 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocaw 2014
Grzegorz Bartman
Daj si wyrczy - Joomla Day Polska 2014
Daj si wyrczy - Joomla Day Polska 2014Daj si wyrczy - Joomla Day Polska 2014
Daj si wyrczy - Joomla Day Polska 2014
Tomasz Dziuda
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2
Natalia Stanko
Lazy loading in Angular
Lazy loading in Angular Lazy loading in Angular
Lazy loading in Angular
Maciej Dr甜ek
TWIG - nieze widoki dla PHP
TWIG - nieze widoki dla PHPTWIG - nieze widoki dla PHP
TWIG - nieze widoki dla PHP
Piotr Gabryjeluk
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztaty
intive
Codeception - jak zacz pisa automatyczne testy do Drupala [PL]
Codeception - jak zacz pisa automatyczne testy do Drupala [PL]Codeception - jak zacz pisa automatyczne testy do Drupala [PL]
Codeception - jak zacz pisa automatyczne testy do Drupala [PL]
Droptica
Webpack - Czym jest webpack i dlaczego chcesz go u甜ywa? - wersja kr坦tka
Webpack - Czym jest webpack i dlaczego chcesz go u甜ywa? - wersja kr坦tkaWebpack - Czym jest webpack i dlaczego chcesz go u甜ywa? - wersja kr坦tka
Webpack - Czym jest webpack i dlaczego chcesz go u甜ywa? - wersja kr坦tka
Marcin Gajda
Programowanie Komponentowe: #C Wprowadzenie do OSGi
Programowanie Komponentowe: #C Wprowadzenie do OSGiProgramowanie Komponentowe: #C Wprowadzenie do OSGi
Programowanie Komponentowe: #C Wprowadzenie do OSGi
Mikoaj Olszewski
react-pl.pdf
react-pl.pdfreact-pl.pdf
react-pl.pdf
ssuser65180a
Magento Meetup Wrocaw 6. "Venia Storefront Concept", Piotr Makowski VIRTUA
Magento Meetup Wrocaw 6. "Venia Storefront Concept", Piotr Makowski VIRTUAMagento Meetup Wrocaw 6. "Venia Storefront Concept", Piotr Makowski VIRTUA
Magento Meetup Wrocaw 6. "Venia Storefront Concept", Piotr Makowski VIRTUA
Magento Meetup Wrocaw
Zastosowanie buildout przy wdra甜aniu projekt坦w opartych o framework Django
Zastosowanie buildout przy wdra甜aniu projekt坦w opartych o framework DjangoZastosowanie buildout przy wdra甜aniu projekt坦w opartych o framework Django
Zastosowanie buildout przy wdra甜aniu projekt坦w opartych o framework Django
Dominik Szopa
Cige Dostarcznie - Wprowadzenie
Cige Dostarcznie - WprowadzenieCige Dostarcznie - Wprowadzenie
Cige Dostarcznie - Wprowadzenie
Artur Radosz
Platforma Kontentowa
Platforma KontentowaPlatforma Kontentowa
Platforma Kontentowa
Rafa Filipek
4Developers 2015: .NET 2015 - co nowego? - Micha Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Micha Dudak, Future Processing4Developers 2015: .NET 2015 - co nowego? - Micha Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Micha Dudak, Future Processing
PROIDEA
M4j3
M4j3M4j3
M4j3
Emotka
M4j3
M4j3M4j3
M4j3
Emotka
Bohater UI bez front end developera ?
Bohater UI bez front end developera ?Bohater UI bez front end developera ?
Bohater UI bez front end developera ?
Quick-Solution
agodne wprowadzenie do Angular2
agodne wprowadzenie do Angular2agodne wprowadzenie do Angular2
agodne wprowadzenie do Angular2
Jakub Nietrzeba
HYC - Angular sta si kanciastym
HYC - Angular sta si kanciastymHYC - Angular sta si kanciastym
HYC - Angular sta si kanciastym
Dariusz Jagieo
Code driven development w Drupalu 7 | DrupalCamp Wrocaw 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocaw 2014Code driven development w Drupalu 7 | DrupalCamp Wrocaw 2014
Code driven development w Drupalu 7 | DrupalCamp Wrocaw 2014
Grzegorz Bartman
Daj si wyrczy - Joomla Day Polska 2014
Daj si wyrczy - Joomla Day Polska 2014Daj si wyrczy - Joomla Day Polska 2014
Daj si wyrczy - Joomla Day Polska 2014
Tomasz Dziuda
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2
Natalia Stanko
Lazy loading in Angular
Lazy loading in Angular Lazy loading in Angular
Lazy loading in Angular
Maciej Dr甜ek
TWIG - nieze widoki dla PHP
TWIG - nieze widoki dla PHPTWIG - nieze widoki dla PHP
TWIG - nieze widoki dla PHP
Piotr Gabryjeluk
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztaty
intive
Codeception - jak zacz pisa automatyczne testy do Drupala [PL]
Codeception - jak zacz pisa automatyczne testy do Drupala [PL]Codeception - jak zacz pisa automatyczne testy do Drupala [PL]
Codeception - jak zacz pisa automatyczne testy do Drupala [PL]
Droptica
Webpack - Czym jest webpack i dlaczego chcesz go u甜ywa? - wersja kr坦tka
Webpack - Czym jest webpack i dlaczego chcesz go u甜ywa? - wersja kr坦tkaWebpack - Czym jest webpack i dlaczego chcesz go u甜ywa? - wersja kr坦tka
Webpack - Czym jest webpack i dlaczego chcesz go u甜ywa? - wersja kr坦tka
Marcin Gajda
Programowanie Komponentowe: #C Wprowadzenie do OSGi
Programowanie Komponentowe: #C Wprowadzenie do OSGiProgramowanie Komponentowe: #C Wprowadzenie do OSGi
Programowanie Komponentowe: #C Wprowadzenie do OSGi
Mikoaj Olszewski
Magento Meetup Wrocaw 6. "Venia Storefront Concept", Piotr Makowski VIRTUA
Magento Meetup Wrocaw 6. "Venia Storefront Concept", Piotr Makowski VIRTUAMagento Meetup Wrocaw 6. "Venia Storefront Concept", Piotr Makowski VIRTUA
Magento Meetup Wrocaw 6. "Venia Storefront Concept", Piotr Makowski VIRTUA
Magento Meetup Wrocaw
Zastosowanie buildout przy wdra甜aniu projekt坦w opartych o framework Django
Zastosowanie buildout przy wdra甜aniu projekt坦w opartych o framework DjangoZastosowanie buildout przy wdra甜aniu projekt坦w opartych o framework Django
Zastosowanie buildout przy wdra甜aniu projekt坦w opartych o framework Django
Dominik Szopa
Cige Dostarcznie - Wprowadzenie
Cige Dostarcznie - WprowadzenieCige Dostarcznie - Wprowadzenie
Cige Dostarcznie - Wprowadzenie
Artur Radosz
Platforma Kontentowa
Platforma KontentowaPlatforma Kontentowa
Platforma Kontentowa
Rafa Filipek
4Developers 2015: .NET 2015 - co nowego? - Micha Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Micha Dudak, Future Processing4Developers 2015: .NET 2015 - co nowego? - Micha Dudak, Future Processing
4Developers 2015: .NET 2015 - co nowego? - Micha Dudak, Future Processing
PROIDEA
M4j3
M4j3M4j3
M4j3
Emotka
M4j3
M4j3M4j3
M4j3
Emotka

More from Sages (18)

Python szybki start
Python   szybki startPython   szybki start
Python szybki start
Sages
Budowanie rozwiza serverless w chmurze Azure
Budowanie rozwiza serverless w chmurze AzureBudowanie rozwiza serverless w chmurze Azure
Budowanie rozwiza serverless w chmurze Azure
Sages
Docker praktyczne podstawy
Docker  praktyczne podstawyDocker  praktyczne podstawy
Docker praktyczne podstawy
Sages
Jak dziaa blockchain?
Jak dziaa blockchain?Jak dziaa blockchain?
Jak dziaa blockchain?
Sages
Qgis szybki start
Qgis szybki startQgis szybki start
Qgis szybki start
Sages
Architektura SOA - wstp
Architektura SOA - wstpArchitektura SOA - wstp
Architektura SOA - wstp
Sages
Bezpieczne dane w aplikacjach java
Bezpieczne dane w aplikacjach javaBezpieczne dane w aplikacjach java
Bezpieczne dane w aplikacjach java
Sages
Wprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopWprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache Hadoop
Sages
Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji android
Sages
Zr坦b dobrze swojej kom坦rce - programowanie urzdze mobilnych z wykorzystanie...
Zr坦b dobrze swojej kom坦rce - programowanie urzdze mobilnych z wykorzystanie...Zr坦b dobrze swojej kom坦rce - programowanie urzdze mobilnych z wykorzystanie...
Zr坦b dobrze swojej kom坦rce - programowanie urzdze mobilnych z wykorzystanie...
Sages
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem WekaSzybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
Sages
Jak zacz przetwarzanie maych i du甜ych danych tekstowych?
Jak zacz przetwarzanie maych i du甜ych danych tekstowych?Jak zacz przetwarzanie maych i du甜ych danych tekstowych?
Jak zacz przetwarzanie maych i du甜ych danych tekstowych?
Sages
Wprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkWprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache Spark
Sages
Wprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetWprowadzenie do technologii Puppet
Wprowadzenie do technologii Puppet
Sages
Vert.x v3 - high performance polyglot application toolkit
Vert.x v3 - high performance  polyglot application toolkitVert.x v3 - high performance  polyglot application toolkit
Vert.x v3 - high performance polyglot application toolkit
Sages
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemWprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Sages
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseCodepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Sages
Wprowadzenie do technologii Big Data
Wprowadzenie do technologii Big DataWprowadzenie do technologii Big Data
Wprowadzenie do technologii Big Data
Sages
Python szybki start
Python   szybki startPython   szybki start
Python szybki start
Sages
Budowanie rozwiza serverless w chmurze Azure
Budowanie rozwiza serverless w chmurze AzureBudowanie rozwiza serverless w chmurze Azure
Budowanie rozwiza serverless w chmurze Azure
Sages
Docker praktyczne podstawy
Docker  praktyczne podstawyDocker  praktyczne podstawy
Docker praktyczne podstawy
Sages
Jak dziaa blockchain?
Jak dziaa blockchain?Jak dziaa blockchain?
Jak dziaa blockchain?
Sages
Qgis szybki start
Qgis szybki startQgis szybki start
Qgis szybki start
Sages
Architektura SOA - wstp
Architektura SOA - wstpArchitektura SOA - wstp
Architektura SOA - wstp
Sages
Bezpieczne dane w aplikacjach java
Bezpieczne dane w aplikacjach javaBezpieczne dane w aplikacjach java
Bezpieczne dane w aplikacjach java
Sages
Wprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopWprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache Hadoop
Sages
Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji android
Sages
Zr坦b dobrze swojej kom坦rce - programowanie urzdze mobilnych z wykorzystanie...
Zr坦b dobrze swojej kom坦rce - programowanie urzdze mobilnych z wykorzystanie...Zr坦b dobrze swojej kom坦rce - programowanie urzdze mobilnych z wykorzystanie...
Zr坦b dobrze swojej kom坦rce - programowanie urzdze mobilnych z wykorzystanie...
Sages
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem WekaSzybkie wprowadzenie do eksploracji danych z pakietem Weka
Szybkie wprowadzenie do eksploracji danych z pakietem Weka
Sages
Jak zacz przetwarzanie maych i du甜ych danych tekstowych?
Jak zacz przetwarzanie maych i du甜ych danych tekstowych?Jak zacz przetwarzanie maych i du甜ych danych tekstowych?
Jak zacz przetwarzanie maych i du甜ych danych tekstowych?
Sages
Wprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkWprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache Spark
Sages
Wprowadzenie do technologii Puppet
Wprowadzenie do technologii PuppetWprowadzenie do technologii Puppet
Wprowadzenie do technologii Puppet
Sages
Vert.x v3 - high performance polyglot application toolkit
Vert.x v3 - high performance  polyglot application toolkitVert.x v3 - high performance  polyglot application toolkit
Vert.x v3 - high performance polyglot application toolkit
Sages
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemWprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Sages
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash courseCodepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Codepot - Pig i Hive: szybkie wprowadzenie / Pig and Hive crash course
Sages
Wprowadzenie do technologii Big Data
Wprowadzenie do technologii Big DataWprowadzenie do technologii Big Data
Wprowadzenie do technologii Big Data
Sages

Angular 4 pragmatycznie

  • 3. Prowadzcy szkolenie Tomasz Sukowski Trener IT FrontEnd Engineer Cel i plan szkolenia Obowizki bie甜ce Pytania, dyskusje, potrzeby Elastyczno zagadnie
  • 5. "Node Package Manager" system zarzdzania zale甜nociami dla油server-side js i client-side js zale甜noci opisywane z dokadnoci do油wersji w油pliku package.json (nowy projekt tworzymy poleceniem npm init) npm install - instaluje pakiety, kt坦rych jeszcze nie ma w projekcie npm update - sprawdza, czy istniej nowsze wersje pakiet坦w i instaluje npm install nazwa-pakietu --save lub --save-dev - instaluje pakiet, dodaje go do package.json przydatne skr坦ty: npm init -y , npm i -S , npm i -D
  • 7. ECMAScript 2015 Kolejna (po ECMAScript 5) wersja standardu JavaScript Najwiksze dotychczas rozwinicie tego jzyka Od 2015 aktualizacje standardu bd wydawane co油roku ECMAScript 2016 jest znacznie mniejsz ewolucj 5 etap坦w do implementacji propozycji: Strawman (0) > Proposal (1) > Draft (2) > Candidate (3) > Finished (4)
  • 9. ES2015 - narzdzia Kod ECMAScript 2015 mo甜emy transpilowa dla油starszych przegldarek Do wyboru: Traceur, TypeScript, Babel Warto: szybki rozw坦j js, wicej mo甜liwoci ju甜 dzi, mniej boilerplate code, ... Transpilers are here to stay
  • 10. ES2015 - arrow functions // Domylnie - zwraca wyra甜enie var odds = myArr.map(v => v + 1); var nums = myArr.map((v, i) => v + i); var pairs = myArr.map(v => ({even: v, odd: v + 1})); // Deklaracje umieszczamy w klamrach nums.forEach(v => { if (v % 5 === 0) fives.push(v); }); // Leksykalne this var bob = { _name: "Bob", _friends: [], printFriends() { this._friends.forEach(f => console.log(this._name + " knows " + f)); } }
  • 11. ES2015 - klasy class Student extends Person { constructor(name, age, major) { super(name, age); this.major = major; } greet(greeting) { console.log(greeting, this.name); } get year() { return (new Date()).getFullYear() - this.age; } set age(age) { this.age = parseInt(age); } static defaultAge() { return 18; }
  • 12. ES2015 - let, const function f() { let x; { // let i const maj zasig blokowy const x = "sneaky"; // const nie mo甜e zmieni referencji x = "foo"; } // bd, nie mo甜na ponownie zdefiniowa let x = "inner"; }
  • 13. ES2015 - moduy // lib/math.js export function sum(x, y) { return x + y; } export var pi = 3.141593; export default var name = "Math module"; // app.js import * as math from "lib/math"; alert("2 = " + math.sum(math.pi, math.pi)); // otherApp.js import name from "lib/math"; import {sum, pi} from "lib/math"; alert("2 = " + sum(pi, pi));
  • 15. TypeScript Superset ECMAScrtipt 2015 z elementami ES2016 i 2017 oraz z silnym typowaniem Konieczna jest transpilacja (do ES2015, ES5 lub ES3) Bdy w typach wyapywane na etapie kompilacji i przez IDE Instalacja: npm i -g typescript Kompilacja: tsc my-app.ts Linting: npm i -D tslint
  • 16. TypeScript: u甜ycie z bibliotekami js Mo甜emy korzysta z zewntrznych bibliotek bez potrzeby ich mody鍖kacji Potrzebujemy de鍖nicji ich interfejs坦w Przechowujemy je w plikach *.d.ts Publikowane pliki de鍖nicji dla popularnych bibliotek instalujemy za pomoc npm
  • 17. TypeScript: typy typ: przykadowe wartoci: boolean true, false number liczby, Infinity, NaN string znaki, cigi znak坦w [] tablice innych typ坦w, np. number[], boolean[] {} obiekt undefined nie zde鍖niowany
  • 18. TypeScript: typy typ: przykadowe wartoci: enum wylistowanie, np. { Admin, Publisher, User } any dowolny typ void nic - w przypadku braku okrelenia typu, TypeScript油mo甜e si go "domyli" (type inference)
  • 19. TypeScript: klasy class Person { dateOfBirth: number; // publiczna wasno private verified: boolean; // prywatna wasno constructor( name: string, // definicja parametru public city: string, // i publicznej wasnoci age?: number // parametr opcjonalny ) { /* ... */ } }
  • 22. @NgModule Narzdzie do organizacji struktury aplikacji Zawieraj powizane ze sob komponenty, dyrektywy i pipes Wszystkie podstawowe funkcjonalnoci Angulara s zawarte w油moduach (FormsModule, HttpModule, RouterModule) Mog by lazy- lub eager loaded Aplikacja zawiera jeden g坦wny modu, kt坦ry su甜y do jej wystartowania (bootstrap) i importuje pozostae moduy Deklarujemy jako klas z dekoratorem @NgModule
  • 23. @NgModule interface NgModule { providers : Provider[] lista usug dostpnych w danym module declarations : Array<Type<any>|any[]> lista komponent坦w, dyrektyw i pipes dostpnych w danym module exports : Array<Type<any>|any[]> lista komponent坦w, dyrektyw i pipes, kt坦re modu udostpnia na zewntrz imports : Array<Type<any>|ModuleWithProviders|any[]> lista innych modu坦w, kt坦re eksportuj potrzne nam rzeczy bootstrap : Array<Type<any>|any[]> root component moduu - g坦wny komponent g坦wnego moduu }
  • 24. Bootstrapping the app import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; @NgModule({ imports: [ BrowserModule ] }) export class AppModule { } const platform = platformBrowserDynamic(); platform.bootstrapModule(AppModule);
  • 26. "Komponent kontroluje wycinek obszaru ekranu, kt坦ry油mo甜emy nazwa widokiem i de鍖niuje reu甜ywalne bloki skadowe UI w aplikacji." Podstawowa koncepcja aplikacji w Angular 2 Caa aplikacja jest drzewem komponent坦w TodoApp TodoApp TodoForm TodoItem TodoItem TodoItem
  • 27. Komponent import { Component } from '@angular/core'; @Component({ selector: 'my-component', template: `<div>Hello my name is {{name}}. <button (click)="greet()">Greet</button></div>` }) export class MyComponent { constructor() { this.name = 'Max' } greet() { console.log('My name is', this.name) } }
  • 28. @Component({ selector: 'todo-input', template: '...' }) export class Hello { @Input() item: MyTodoType; } // lub: @Component({ selector: 'todo-input', inputs: ['item'], template: '...' }) export class Hello { item: MyTodoType; } Komponent: komunikacja "do" // przekazywanie przez zmienn: <todo-input [item]="myItem"></todo-input> // przekazywanie wartoci bezporednio <todo-input item="Kupi chleb"></todo-input>
  • 29. Komponent: komunikacja "z" - zdarzenia <todo-input (completed)="saveProgress(item)"></todo-input> // alternatywna skadnia - dlatego nie prefixujemy zdarze "on" <todo-input on-completed="saveProgress(item)"></todo-input> // lub: @Component({ selector: 'todo-input', outputs: ['completed'], .... @Component({ selector: 'todo-input', template: '...' }) export class Hello { @Output() completed: EventEmitter<boolean> = new EventEmitter<boolean>(); }
  • 30. Komponent: komunikacja w obie strony <input [ngModel]="name" (ngModelChange)="name=$event"> // Skr坦cony zapis: <input [(ngModel)]="name"> Poczenie komunikacji "z" i "do" Wykorzystujemy do tego dyrektyw ngModel [(ngModel)]
  • 31. U甜ywanie komponent坦w Aby m坦c wykorzysta komponent w szablonie innego komponentu, nale甜y doda go do listy u甜ywanych dyrektyw a w celu u甜ycia w innych moduach - wyeksportowa @NgModule({ declarations: [ TodoInputComponent, TodoListComponent, TodoComponent ], imports: [ ], exports: [ TodoComponent ] }) class MySharedModule {}
  • 33. @Directive Dyrektywa mody鍖kuje DOM* zmieniajc jego wygld lub油zachowanie W Angular wyr坦甜niamy 3 rodzaje dyrektyw: 1. Komponenty - dyrektywy z szablonami 2. Dyrektywy atrybutowe - zmieniaj zachowanie komponentu/elementu ale nie wpywaj na jego szablon 3. Dyrektywy strukturalne - zmieniaj zachowanie komponentu/elementu przez mody鍖kacj jego szablonu
  • 34. Dyrektywy atrybutowe <div [ngStyle]="{'font-size': mySize+'px'}">...</div> <div [ngStyle]="{'font-size.px': mySize}">...</div> <div [ngStyle]="myStyle">...</div> ngStyle: <div [ngClass]="'first second'">...</div> <div [ngClass]="['first', 'second']">...</div> <div [ngClass]="{first: true, second: -1, third: 0}">... ngClass:
  • 35. Dyrektywy strukturalne <template [ngIf]="condition"> <div>{{ hero }}</div> </template> Su甜 do mody鍖kacji struktury DOM - dodawania i usuwania element坦w // Skr坦cony zapis: <div *ngIf="completed"> </div>
  • 36. Dyrektywy strukturalne <div *ngFor="let item of todoList; let i = index"> ... </div> Wbudowane dyrektywy strukturalne: <div *ngIf="completed"> </div> <div [ngSwitch]="item.status"> <p *ngSwitchCase="'completed'"> Completed <p> <p *ngSwitchCase="'in-progress'"> Working on it <p> <p *ngSwitchDefault="'in-progress'"> Working on it <p> </div> dostpne wartoci: index, first, last, even, odd
  • 38. Wstrzykiwanie zale甜noci Klas rozszerzon dekoratorem (np. @Injectable) @Injectable() class TodosService { constructor() {} } class TodoItemComponent { constructor(ts: TodosService) {} // skr坦cony zapis // constructor(@Inject(TodosService) ts) {} // peen zapis } i油zarejestrowan jako provider mo甜emy wstrzykn do konstruktor坦w innych klas @NgModule({ providers: [ TodoService,
  • 39. Wstrzykiwanie zale甜noci - Singletons? Domylnie mechanizm DI zwraca singletony Mo甜emy jednak utworzy wicej iniektor坦w Uzyskujc, analogicznie jak w przypadku komponent坦w, struktur drzewiast @Component({ providers: [Todos] }) Komponent, kt坦ry ma zde鍖niowane w ten spos坦b usugi, nie油bdzie油szuka ich instancji wy甜ej w drzewie komponent坦w, tylko powoa nowe
  • 41. Routing: definicja Routing (dostpny z '@angular/router') dostarczamy do aplikacji jako ModuleWithProviders Przekazujemy do niego tablic Route De鍖nition Object export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes); const appRoutes = [ {path: '', component: HomePageComponent}, {path: 'users/:id', component: UserProfileComponent} ] gdzie tablica zawiera elementy opisane interfejsem Route
  • 42. Routing: wywietlanie Komponent pasujcy do aktualnej cie甜ki zostanie zaadowany wewntrz komponentu RouterOutlet Za generowanie adresu na potrzeby linku odpowiada dyrektywa router-link @Component({ selector: 'main-app', template: `<main> <a [routerLink]="['/Contact']" routerLinkActive="active">Contact</a> <div style="border: 1px solid black"> <router-outlet></router-outlet> </div> </main>`})
  • 43. Angular 4 Style Guide Zestaw wskaz坦wek dotyczcych sposobu pisania aplikacji w油Angular 4 Styleguide dla AngularJS by rozwijany przez spoeczno i dostpny na GitHubie Styleguide dla Angular 4 jest mocniej wspierany przez tw坦rc坦w frameworka i dostpny w ramach o鍖cjalnej dokumentacji (https://angular.io/docs/ts/latest/guide/style-guide.html) Wikszo uwag to sugestie, warto przeanalizowa, czy odpowiadaj naszym potrzebom
  • 44. Zapoznaj si z ofert szkoleniow Podczas naszych szkole: - pracujemy w grupach 4-8 osobowych - program mo甜e by dostosowany do oczekiwa grupy - rozwizujemy i odpowiadamy na indywidualne pytania uczestnik坦w - mamy du甜o wicej czasu :) Chcesz wiedzie wicej?
  • 45. I odbierz na nie zni甜k w wysokoci 35% Angular 2 - budowanie nowoczesnych i wydajnych aplikacji przegldarkowych Budowanie wydajnych i nowoczesnych aplikacji webowych w oparciu o React, Flux i powizane technologie Efektywne tworzenie aplikacji webowych z wykorzystaniem AngularJS, HTML5 i JavaScript Wybierz jedno z poni甜szych szkole