際際滷

際際滷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 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
ECMAScript 6
ECMAScript 2015
ECMAScript 2015
 Kolejna (po ECMAScript 5) wersja standardu JavaScript
 Najwiksze dotychczas rozwinicie tego jzyka
 Od 2015 aktualizacje standardu bd wydawane coroku
 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
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
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,
TypeScriptmo甜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
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
@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坦rymo甜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
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
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
}
 izarejestrowan 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,
niebdzieszuka 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
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

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

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 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
  • 7. ECMAScript 2015 Kolejna (po ECMAScript 5) wersja standardu JavaScript Najwiksze dotychczas rozwinicie tego jzyka Od 2015 aktualizacje standardu bd wydawane coroku 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 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);
  • 26. "Komponent kontroluje wycinek obszaru ekranu, kt坦rymo甜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 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
  • 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 } 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