ANGULAR 2+ Waldemar Korłub. Aplikacje i Usługi Internetowe KASK ETI Politechnika Gdańska

Podobne dokumenty
ANGULAR 2+ Waldemar Korłub. Aplikacje i Usługi Internetowe KASK ETI Politechnika Gdańska

O sobie. Adam Kowalski. Absolwent informatyki Uniwersytetu Wrocławskiego Full-stack Developer w firmie Synergy Codes.

MOBILNE APLIKACJE HYBRYDOWE

WYKŁAD 1 ANGULARJS CZĘŚĆ 1

Framework Angular4. Alicja Frankowicz Weronika Węglińska

Laboratorium 4: Routing

Full Stack JavaScript z Angular i Nest. Dni: 5. Opis: Adresaci szkolenia

Aplikacje SPA, Angular, TypeScript. dr hab. inż. Marek Wojciechowski

ANGULARJS TWORZENIE APLIKACJI INTERNETOWYCH

Tytuł szkolenia: Angular 4 - budowanie nowoczesnych i wydajnych aplikacji przeglądarkowych

Angular, cz. II. Tworzenie serwisów Web 2.0. dr inż. Robert Perliński

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

W czystym JavaScripcie zasięgi zmiennych tworzone były poprzez funkcje anonimowe, w AngularJS posiadamy kontrolery, które także są funkcjami.

Zajęcia 4 - Wprowadzenie do Javascript

Laboratorium 7 Blog: dodawanie i edycja wpisów

Laboratorium 2: Portfolio zdjęciowe, p.1

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Podstawy technologii WWW

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Java Server Faces narzędzie do implementacji w wy prezentacji

Aplikacje SPA, Angular, TypeScript. dr hab. inż. Marek Wojciechowski

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Laboratorium 2: Portfolio zdjęciowe, p.1

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

Front-end: solidne podstawy. Wszystko, co warto wiedzieć o HTML, CSS, JavaScript i Bootstrap.

Wprowadzenie do projektu QualitySpy

Efektywne tworzenie aplikacji webowych z wykorzystaniem AngularJS, HTML5 i JavaScript

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Zaawansowane aplikacje internetowe - laboratorium

Widżety KIWIPortal. tworzenie umieszczanie na stronach internetowych opcje zaawansowane. Autor: Damian Rebuś Data: Wersja: 1.

Zrąb JavascriptMVC. Krzysztof Płocharz. 6 kwiecień Uniwersytet Warszawski

Omówienie wzorców wykorzystywanych w Prism 5.0. Dominika Różycka

Podstawy JavaScript ćwiczenia

Plan. Aplikacja. Architektura aplikacji. Architektura aplikacji Tworzenie aplikacji Application Builder podstawy

Backend Administratora

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

Format HTML. Wybrane działy Informatyki Stosowanej. Definicja i przeznaczenie Struktura dokumentu Znaczniki Formularze i komponenty

REFERAT O PRACY DYPLOMOWEJ

GRID LAYOUT. Waldemar Korłub. Aplikacje i Usługi Internetowe KASK ETI Politechnika Gdańska

Serwery aplikacji. dr Radosław Matusik. radmat

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Kurs WWW. Paweł Rajba.

Zaawansowane aplikacje internetowe

app/ - folder zawiera pliki konfiguracyjne dla całej aplikacji src/ - folder zawiera cały kod PHP aplikacji

Programowanie obiektowe

Instrukcja laboratoryjna nr.4

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Rys.2.1. Drzewo modelu DOM [1]

REACT NATIVE. Anna Maziejuk Kamil Jankowski

Mobilne aplikacje hybrydowe

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Baza danych sql. 1. Wprowadzenie

Modele danych walidacja widoki zorientowane na model

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Ćwiczenie 2. Tworzenie serwisów internetowych. Zapoznanie z pakietem WebRatio

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Laboratorium 6 Tworzenie bloga w Zend Framework

GENERATOR OFERTY PDF DOKUMENTACJA UŻYTKOWA 1/20

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

Część I Rozpoczęcie pracy z usługami Reporting Services

2 Podstawy tworzenia stron internetowych

BAZY DANYCH MAKRA I PRZYCISKI. Microsoft Access. Adrian Horzyk. Akademia Górniczo-Hutnicza

Kurs ASP.NET ASP.NET CORE APLIKACJE WEBOWE

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

WYMAGANIA EDUKACYJNE. Witryny i Aplikacje Internetowe klasa I

JUnit TESTY JEDNOSTKOWE. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Enterprise JavaBeans (EJB)

Laboratorium Technologii Informacyjnych. Projektowanie Baz Danych

Podstawy wzorca MVC MODEL KON- TROLER WIDOK. Odpowiada za wyświetlenie danych użytkownikowi. Zawiera dane aplikacji oraz jej logikę.

Dokumentacja systemu NTP rekrut. Autor: Sławomir Miller

Warstwa prezentacji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Zdarzenia w JavaScript (Zajęcia r.)

Tomasz Grześ. Systemy zarządzania treścią, cz. II

Przygotowanie do nowoczesnego programowania po stronie przeglądarki. (HTML5, CSS3, JS, wzorce, architektura, narzędzia)

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

MVC w praktyce tworzymy system artykułów. cz. 2

Projekt Hurtownia, realizacja rejestracji dostaw produktów

Spring Web MVC, Spring DI

Quiz Aplikacja internetowa

Programowanie obiektowe

Zaawansowane aplikacje WWW - laboratorium

Funkcje i instrukcje języka JavaScript

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Podstawowe elementy GUI cz. 2 i 3 - zadania

Aplikacje WWW - laboratorium

Projekt Hurtownia, realizacja rejestracji dostaw produktów

UONET+ - moduł Sekretariat

Aplikacje WWW - laboratorium

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

1. Dockbar, CMS + wyszukiwarka aplikacji Dodawanie portletów Widok zawartości stron... 3

WYKŁAD 5 BIBLIOTEKA JQUERY CZĘŚĆ 1

Wzorce prezentacji internetowych

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Przewodnik użytkownika (instrukcja) AutoMagicTest

Podstawy technologii WWW

Transkrypt:

ANGULAR 2+ Waldemar Korłub Aplikacje i Usługi Internetowe KASK ETI Politechnika Gdańska

2 Architektura

Architektura frameworka Angular 3 Aplikacja wykorzystuje język HTML i style CSS Poza standardowymi znacznikami HTML występują również dodatkowe specjalne znaczniki Dodatkowe znaczniki umożliwiają wykorzystanie komponentów definiowanych w projekcie Komponent opisuje fragment widoku oraz jego zachowania Komponent może być zbudowany z innych komponentów Hierarchiczna struktura widoków Logika aplikacji implementowana w serwisach Komponenty i serwisy grupowane w modułach

4 Architektura

Architektura 5 Moduły (ang. modules) Komponenty (ang. components) Szablony (ang. templates) Metadane (ang. metadata) Wiązanie danych (ang. data binding) Dyrektywy (ang. directives) Serwisy (ang. services) Wstrzykiwanie zależności (ang. dependency injection)

Moduły 6 Aplikacje w Angularze dzieli się na moduły odpowiadające poszczególnym funkcjonalnościom Każda aplikacja posiada główny moduł o nazwie AppModule Małe aplikacje mogą posiadać tylko jeden moduł, duże aplikacje setki modułów Moduły definiowane jako klasy z dekoratorem @NgModule Dekoratory umożliwiają dołączenie metadanych do klasy

NgModule metadane 7 Najważniejsze metadane dekoratora NgModule: declarations lista komponentów wykorzystywanych do budowania widoków aplikacji exports lista klas/komponentów, które powinny być dostępne do wykorzystania przez inne moduły imports lista modułów, których wyeksportowane klasy są wykorzystywane w module bieżącym providers lista dostawców umożliwiających budowanie instancji serwisów do wykorzystania w całej aplikacji (we wszystkich modułach) bootstrap komponent reprezentujący główny widok aplikacji (do niego ładowane są wszystkie inne widoki), używany tylko dla AppModule

Przykład AppModule (app.module.ts) 8 @NgModule({ imports: [ BrowserModule, AppRoutingModule, HttpClientModule, FormsModule ], declarations: [ AppComponent, NavbarComponent, SignInComponent, BooksComponent, //... ], providers: [ BooksService, AuthService, CartService, OrdersService, IdentityService ], bootstrap: [AppComponent] }) export class AppModule { }

Moduły Angulara a moduły w języku 9 JavaScript W języku JavaScript każdy plik jest modułem Moduły w języku JavaScript i moduły frameworka Angular to dwie osobne koncepcje JavaScript: moduł = plik Angular: moduł = zbiór komponentów i serwisów W typowym projekcie używamy obu mechanizmów modułów równocześnie Wspólne nazewnictwo (moduł/import/export) dla odrębnych mechanizmów może wywoływać dezorientację

Moduły w języku JavaScript 10 Słowo kluczowe export w plikach (modułach).js określa obiekty, które dany moduł udostępnia innym modułom (plikom.js): export class AppModule { } export class AppComponent { } Inne pliki (moduły).js mogą korzystać z tych obiektów korzystając z dyrektywy import: import {AppComponent} from "./app.component";

Uruchomienie aplikacji za pomocą 11 modułu AppModule Należy zaimportować klasę AppModule z pliku (modułu) JavaScript Wywołanie metody bootstrapmodule inicjuje moduł Angulara: import { AppModule } from './app/app.module'; platformbrowserdynamic(). bootstrapmodule(appmodule);

Komponenty (ang. components) 12 Reprezentują fragmenty widoków składające się na interfejs aplikacji Definiowane jako klasy z dekoratorem @Component Są reprezentowane przez dodatkowe znaczniki umieszczane w kodzie HTML, np.: <body> <my-app>loading...</my-app> </body>

Komponenty (ang. components) 13 Komponent określa: Szablon używany do zbudowania fragmentu widoku (tagi HTML obejmujące też tagi innych komponentów) Dane do prezentacji (model) Zachowania (funkcje obsługi zdarzeń) @Component najważniejsze metadane: selector selektor CSS określający które znaczniki na stronie mają zostać wypełnione zawartością komponentu templateurl ścieżka do pliku.html z szablonem providers lista dostawców serwisów, z których korzysta komponent

Przykładowy komponent 14 @Component({ selector: 'app-books', templateurl: './books.component.html', styleurls: ['./books.component.css'] }) export class BooksComponent implements OnInit { @Input() limit: number; books: Observable<Book[]>; constructor(private booksservice: BooksService) { } } ngoninit() { this.books = this.booksservice.getbooks(this.limit); }

Szablony (ang. templates) 15 Wykorzystywane przez komponenty do wygenerowania treści w oknie przeglądarki Składnia opiera się na składni języka HTML Zawierają dodatkowe elementy Znaczniki umożliwiające dołączanie kolejnych komponentów do widoku Dyrektywy umożliwiające sterowanie procesem generowania wynikowego kodu HTML

Przykładowy szablon 16 <tbody> <tr *ngfor="let book of books async; index as i"> <td>{{i+1}}</td> <td> <a [routerlink]="['/books',book.id]">{{book.title}}</a> </td> <td> {{book.authors[0].name}} {{book.authors[0].surname}} <span *ngif="book.authors.length > 1"> <i>et al</i> </span> </td> <td>{{book.publicationdate date}}</td> <td>{{book.amount}}</td> </tr> </tbody>

Wiązanie danych (ang. data binding) 17 Bez wykorzystania wiązania danych deweloper musi ręcznie umieszczać w drzewie DOM dane uzyskane w kodzie JavaScript (np. wyniki żądania AJAXowego) oraz ręcznie pobierać wartości z drzewa DOM w reakcji na zdarzenia emitowane przez użytkownika (np. keyup, click itd.) Przykładowo: walidacja formularza Po kliknięciu przycisku przez użytkownika pobranie danych z pól, a następnie dodanie komunikatów błędów na stronie Wiązanie danych automatyzuje proces wymiany informacji pomiędzy komponentem i drzewem DOM

4 formy wiązania danych 18 Interpolacja wartości: {{...}} Wiązanie właściwości elementów DOM: [property] Wiązanie obsługi zdarzenia: (event) Dwukierunkowe wiązanie danych: [(...)]

Dyrektywy (ang. directives) 19 Dokumenty HTML posiadają statyczną strukturę Szablony widoków Angulara są dynamiczne Wynikowy HTML jest efektem przetworzenia szablonu zgodnie z umieszczonymi w nim dyrektywami Dwie grupy dyrektyw: Strukturalne modyfikują strukturę dokumentu poprzez dodawanie, usuwanie lub zamianę elementów, np.: *ngfor dodawanie elementów w pętli *ngif warunkowe wyświetlenie elementu Dyrektywy w postaci atrybutów modyfikują wygląd lub zachowanie istniejących już elementów

Serwisy (ang. services) 20 Logika aplikacji nie powinna być implementowana w klasach komponentów Komponent działa w kontekście konkretnego szablonu widoku trudno ponownie wykorzystać logikę zaszytą w klasie komponentu w innych miejscach aplikacji Kontroler powinien definiować pola i metody na potrzeby wiązania danych, a logikę delegować do serwisów Serwisy implementują logikę aplikacji w sposób niezależny od interfejsu Łatwe wykorzystanie w wielu różnych kontekstach Serwisy są dostarczane do komponentów na drodze wstrzykiwania zależności

21 Wstrzykiwanie zależności (ang. dependency injection) Klasa nie odpowiada za pozyskanie swoich zależności, zamiast tego zależności są do niej dostarczane z zewnątrz.

Wstrzykiwanie zależności konsekwencje 22 Klasa nie musi wiedzieć jak pozyskać zależność klasa nie jest uzależniona od sposobu pozyskania wymaganego komponentu (np. obiekt fabryki, builder, klasy narzędziowe) klasa jest uzależniona wyłącznie od wymaganego komponentu Klasa nie musi podejmować decyzji, którą implementację zależności wykorzystać, jeśli jest ich wiele i nie jest związana na stałe z jedną konkretną implementacją! komponent dostarczający zależność wybiera implementację i ją wstrzykuje łatwość zamiany implementacji zależności wykorzystywanej przez klasę, bez konieczności modyfikowania samej klasy

Wstrzykiwanie zależności konsekwencje 23 Klasa nie musi zarządzać (inaczej: przejmować się) cyklem życia swoich zależności ta odpowiedzialność spada na komponent dostarczający zależności upraszcza to projekt klasy wykorzystującej zależności Wstrzykiwanie zależności ułatwia testowanie jednostkowe aplikacji Możliwość odizolowania komponentu od jego zależności, wykorzystania obiektów-zaślepek (ang. mock)

Wstrzykiwanie w Angularze 24 Wstrzykiwanie zależności jest nieodzownym mechanizmem frameworka Angular Wykorzystywane wewnętrznie przez sam framework oraz w komponentach opracowywanych przez autora aplikacji opartej na Angularze Za dostarczenie zależności odpowiada komponent injector Injector utrzymuje instancje serwisów, które mogą być wstrzykiwane Instancje pozyskiwane są przy użyciu dostawców (ang. providers) Należy w projekcie zdefiniować dostawców dla wymaganych serwisów Wstrzykiwanie przez parametry konstruktora

TypeScript: Pola klasy w parametrach konstruktora 25 Jawnie zdefiniowane pola z inicjalizacją w konstruktorze: class Person { private firstname: string; private lastname: string; } constructor(first: string, last: string) { this.firstname = firstname; this.lastname = lastname; } Pola definiowane na poziomie konstruktora: class Person { constructor(private firstname: string, private lastname: string) { } }

26 Szablony i wiązanie danych

Interpolacja: {{ }} 27 Umożliwia wyznaczenie wartości wykorzystywanej w widoku na podstawie wyrażenia, np.: <h3>{{imgtitle}}</h3> <img src="{{imgurl}}"> Wyrażenie najczęściej odnosi się do pól/własności klasy komponentu Wyrażenie w nawiasach {{ }} jest konwertowane na ciąg znaków przed umieszczeniem w widoku

Wyrażenia (ang. template expressions) 28 Wyrażenie może realizować dodatkowe operacje, np.: <p>przekroczono próg o {{getscore()-gettreshold()}} punktów.</p> Wyrażenie nie powinno powodować efektów ubocznych Wyrażenie powinno być szybkie do wykonania Wyrażenia powinny być możliwie krótkie i proste Złożoną logikę należy umieścić w metodzie komponentu i wywoływać gotową metodę w wyrażeniu Wyrażenie powinno być idempotentne

Wiązanie własności 29 Wartości wyrażeń można również wiązać z właściwościami elementów drzewa DOM oraz właściwościami komponentów, np.: <button [disabled]="isunchanged">cancel</button> <img [src]="imgurl"> <app-book-detail [book]="selectedbook"> Takie wiązanie jest jednokierunkowe Zmiana wartości wyrażenia powoduje zmianę wartości właściwości, ale nie odwrotnie Wiązania odnoszą się do właściwości elementów drzewa DOM a nie do atrybutów tagów HTMLowych

30 Właściwości węzłów DOM a atrybuty elementów HTML Niektóre atrybuty elementów HTML mają bezpośrednie odzwierciedlenie w właściwościach węzłów drzewa DOM, np. id, src Dla niektórych atrybutów nie istnieją odpowiadające im właściwości, np. colspan, aria Niektóre właściwości nie posiadają odpowiadających im atrybutów, np. textcontent Niektóre atrybuty mają odzwierciedlenie we właściwościach, ale jest ono nieintuicyjne np. disabled: W HTMLu sama obecność atrybutu powoduje nieaktywność elementu (bez względu na wartość) W drzewie DOM disabled=true powoduje nieaktywność

Wiązanie dla atrybutów 31 Wiązania odnoszą się do właściwości elementów drzewa DOM a nie do atrybutów tagów HTMLowych poza jednym wyjątkiem: <td [attr.colspan]="getcolscount()">one-two</td> Jeśli atrybut nie posiada odpowiednika wśród właściwości DOM jedyny sposób na jego zmianę, to bezpośrednia zmiana atrybutu prefiks: attr.

Wiązanie właściwości CSS 32 Obiektem wiązania mogą być klasy CSS, np.: <div [class.special]="isspecial">...</div> Albo poszczególne właściwości CSS, np.: <button [style.color]="isspecial? 'red': 'green'"> <button [style.background-color]="cansave? 'cyan':'grey'">

{{ }} czy [property]=" "? 33 Interpolacja {{ }} zawsze konwertuje wynik na postać tekstową Wiązanie właściwości [property] zachowuje typ wiązanego wyrażenia

Wiązanie zdarzeń 34 Umożliwia wywoływanie funkcji obsługi zdarzeń zdefiniowanych w klasie komponentu w reakcji na akcje użytkownika, np.: <button (click)="onsave()">save</button>

Wiązanie dwukierunkowe 35 Zmiana wartości związanego pola zmienia wartość właściwości Zmiana wartości właściwości zmienia wartość pola Szczególnie przydatne przy pracy z formularzami Dwukierunkowe wiązanie zbudowane ręcznie : <input [value]="name" (input)="name=$event.target.value" > Różne tagi formularzy wymagają użycia różnych atrybutów Z wykorzystaniem ngmodel: <input [(ngmodel)]="name">

ngmodel 36 Reprezentuje wartość pola w formularzu Umożliwia np. przypisanie wartości początkowej Równocześnie pozwala nasłuchiwać na zmiany Zmiana wartości wykonana przez użytkownika jest automatycznie odzwierciedlona w polu klasy komponentu Obsługuje wszystkie podstawowe elementy formularzy HTML Ukrywa różnice pomiędzy nimi, np.: input value select/option selected

37 Routing nawigacja w aplikacji

Routing 38 Typowe aplikacje internetowe składają się z wielu widoków, pomiędzy którymi nawiguje użytkownik RouterModule umożliwia definiowanie adresów, które spowodują wyświetlenie wybranych komponentów (widoków) aplikacji Znacznik <base href="/"> w sekcji <head> pliku index.html określa bazową ścieżkę dla adresów w ramach aplikacji

Przykładowy routing 39 const routes: Routes = [ {path: '', redirectto: '/sign-in', pathmatch: 'full'}, {path: 'sign-in', component: SignInComponent}, {path: 'dashboard', component: DashboardComponent}, {path: 'books', component: BooksComponent}, {path: 'books/:id', component: BookDetailsComponent}, {path: 'books/:id/edit', component: BookEditComponent}, {path: 'authors', component: AuthorsComponent}, {path: 'cart', component: CartComponent} ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule { }

Nawigacja 40 Nawigacja z użyciem dyrektyw routerlink: <a routerlink="/dashboard" routerlinkactive="active">dashboard</a> <a routerlink="/cart">koszyk</a> Komponent zdefiniowany w routingu zostanie wyświetlony poniżej elementu: <router-outlet></router-outlet>

Programistyczna nawigacja 41 @Component({... }) export class CartComponent implements OnInit { constructor(private router: Router) { } } placeorder(): void { //... this.router.navigate(['orders']); }

Obsługa parametrów routingu 42 Przykładowy routing z parametrami: const routes: Routes = [ //... { path: 'books/:id', component: BookDetailsComponent }, { path: 'books/:id/edit', component: BookEditComponent } ];

Obsługa parametrów routingu 43 W klasie komponentu: @Component({... }) export class BookDetailsComponent implements OnInit { book: Book; constructor(private router: Router, private route: ActivatedRoute) { } } ngoninit() { const id = this.route.snapshot.parammap.get('id'); this.book = //...wczytanie z back-endu... }

Nawigacja z parametrami 44 W szablonie (books.component.html): <table> <tbody> <tr *ngfor="let book of books; index as i"> <td>{{i+1}}</td> <td> <a [routerlink]="['books', book.id]"> {{book.title}} </a> </td> </tr> </tbody> </table>

Nawigacja z parametrami 45 Programistycznie w klasie komponentu: @Component({... }) export class BookEditComponent implements OnInit { book: Book = new Book(); constructor(private router: Router, private route: ActivatedRoute) { } cancel(): void { this.router.navigate(['/books', this.book.id]); } } save(): void { //...zapisanie zmian w formularzu... this.router.navigate(['/books', this.book.id]); }

46 Konsumowanie usług sieciowych

Konsumowanie usług sieciowych 47 Dane prezentowane w aplikacji front-endowej typowo pobierane są z serwera (z back-endu) Informacje wprowadzane przez użytkownika są zapisywane na serwerze Dane z formularzy na stronie, zawartość koszyka/zamówienia itd. Aplikacja back-endowa udostępnia swoje funkcje w postaci usług sieciowych (ang. web services) Front-end konsumuje usługi sieciowe Wrócimy do tej kwestii po wprowadzeniu do usług sieciowych po stronie serwera

48 Dla porównania: AngularJS 1.x

AngularJS 1.x 49 Oparty na języku JavaScript, a nie TypeScript Podstawowe składowe: Widok interfejs użytkownika, generowany na podstawie szablonu Kontroler obsługuje akcje użytkownika Zasięg (ang. scope) związany z widokiem, zawiera model danych oraz funkcje obsługi zdarzeń Serwisy obiekty pomocnicze, oferują funkcje do wykorzystania w kontrolerach (lub w innych serwisach) Routing pozwala na budowanie aplikacji składających się z wielu widoków

AngularJS 1.x istotne koncepcje 50 Wiązanie danych (ang. data binding) łączenie informacji z modelu z elementami interfejsu Może być dwukierunkowy Aktualizacja modelu aktualizacja interfejsu Zmiana w interfejsie (np. edycja pola w formularzu) aktualizacja modelu Wstrzykiwanie zależności Dostarczanie wymaganych serwisów/obiektów/stałych do kontrolerów (lub innych serwisów) Kontroler zamiast samodzielnie pobierać zależność, otrzymuje ją z zewnątrz

AngularJS 1.x kontroler, zasięg 51 Definicja kontrolera: angular.module('starter.controllers', []).controller( 'ProductsCtrl', function($scope, $http, baseurl) { $http.get(baseurl + '/products').then( function(response){ $scope.products = response.data; }); } );

AngularJS 1.x widoki 52 Budowane w oparciu o szablony Odwołania do danych umieszczonych przez kontroler w zasięgu (scope) przy użyciu konstrukcji {{wyrażenie}} Instrukcje sterujące: ng-repeat, ng-if, ng-show, ng-hide <ul ng-show="products.lenght"> <li ng-repeat="product in products"> {{product.name}} </li> </ul>

AngularJS 1.x: przypisanie kontrolera do widoku 53 Na poziomie szablonu: <div ng-controller="productsctrl"> </div> Lub na poziomie routingu: $stateprovider.state('app.products', { url: '/products', templateurl: 'templates/products.html', controller: 'ProductsCtrl' })

Bibliografia 54 Wykorzystano materiały na licencji CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) z oficjalnej dokumentacji frameworka Angular by Google (https://angular.io/docs/ts/latest/)

55 Pytania?