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 dlaserver-side js i client-side js
zale甜noci opisywane z dokadnoci dowersji wpliku 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
9. ES2015 - narzdzia
Kod ECMAScript 2015 mo甜emy transpilowa
dlastarszych 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,
TypeScriptmo甜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
wmoduach (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);
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
lubzachowanie
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
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
}
izarejestrowan 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,
niebdzieszuka 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
wAngular 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