Angular, cz. II. Tworzenie serwisów Web 2.0. dr inż. Robert Perliński rperlinski@icis.pcz.pl



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

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

WYKŁAD 1 ANGULARJS CZĘŚĆ 1

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

Backend Administratora

Podstawy JavaScript ćwiczenia

Spring Web MVC, Spring DI

JQuery. $('#pierwszy').css('color','red').hide('slow').show(3000); $(document).ready(function() { //... tutaj nasze skrypty jquery //...

Angular 1.x, pomoc do lab.

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

PHP: bloki kodu, tablice, obiekty i formularze

AJAX. Wykonał: Marcin Ziółkowski, AGH Kraków, AiR rok 5.

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

Podstawy technologii WWW

TECHNOLOGIE INTERNETOWE WYKŁAD 6. JavaScript Funkcje i obiekty

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

DOM (Document Object Model)

Efektywne tworzenie aplikacji webowych z wykorzystaniem AngularJS, HTML5 i JavaScript

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Zajęcia 4 - Wprowadzenie do Javascript

Użycie filtrów w widoku

Wybrane działy Informatyki Stosowanej

Programowanie w Sieci Internet Python - c. d. Kraków, 28 listopada 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Programowanie w Sieci Internet JSP ciąg dalszy. Kraków, 9 stycznia 2015 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Pomoc dla systemu WordPress

ANGULARJS TWORZENIE APLIKACJI INTERNETOWYCH

Tworzenie i wykorzystanie usług sieciowych

Laboratorium 7 Blog: dodawanie i edycja wpisów

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

Zmienne i stałe w PHP

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

Zaawansowane aplikacje internetowe

XML extensible Markup Language. część 5

PHP: bazy danych, SQL, AJAX i JSON

Przekształcenie danych przestrzennych w interaktywne mapy dostępne na stronach www (WARSZTATY, poziom zaawansowany)

Laboratorium 2: Portfolio zdjęciowe, p.2

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

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

s FAQ: /PL Data: 29/08/2014

Rys.2.1. Drzewo modelu DOM [1]

Po zakończeniu rozważań na temat World Wide Web, poznaniu zasad organizacji witryn WWW, przeczytaniu kilkudziesięciu stron i poznaniu wielu nowych

Tworzenie Stron Internetowych. odcinek 10

Laboratorium 4: Routing

Podstawy technologii WWW

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

Dokumentacja techniczna CMSphere EASY na podstawie wdrożenia dla Gminy Wieliszew

Lab 9 Podstawy Programowania

Podręcznik Integracji

Zakres treści Czas. 2 Określenie charakteru i tematyki strony. Rodzaje witryn. Projekt graficzny witryny. Opracowanie skryptów

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

REFERAT O PRACY DYPLOMOWEJ

Aplikacje Internetowe

Szczegółowy opis zamówienia:

W tej części dowiemy się, jak rozszerzyć WordPress za pomocą JSON-API. Oto kilka rzeczy, które będziemy robić z wtyczką JSON-API:

Program szkolenia: REST i Microservices w PHP

Generated by Foxit PDF Creator Foxit Software For evaluation only. System Szablonów

Dokumentacja imapliteapi

Kurs ASP.NET ASP.NET CORE APLIKACJE WEBOWE

Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

Czym jest AJAX. AJAX wprowadzenie. Obiekt XMLHttpRequest (XHR) Niezbędne narzędzia. Standardowy XHR. XHR z obsługą baz danych

Podstawy programowania w języku JavaScript

Wykład 03 JavaScript. Michał Drabik

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

Funkcje i instrukcje języka JavaScript

Bootstrap. Tworzenie serwisów Web 2.0. dr inż. Robert Perliński

Facelets ViewHandler

NoSQL Not Only SQL, CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Igor Wojnicki

Tomasz Grześ. Systemy zarządzania treścią

Co to jest NODE.JS? Nowoczesne środowisko programistyczne

Laboratorium 6 Tworzenie bloga w Zend Framework

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

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

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Patryk Jar Meet.js, Gdańsk 11 marca 2013 r. MODULARNY JAVASCRIPT

5-6. Struktura dokumentu html. 2 Określenie charakteru i tematyki strony. Rodzaje witryn. Projekt graficzny witryny. Opracowanie skryptów

SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania. Wykład 2. dr Artur Bartoszewski - WYKŁAD: Języki i Systemy Programowania,

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

Specyfikacja techniczna kreacji HTML5

Laboratorium 2: Portfolio zdjęciowe, p.1

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

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

Aplikacje WWW - laboratorium

7. Pętle for. Przykłady

Laboratorium 1 Wprowadzenie do PHP

Webowy generator wykresów wykorzystujący program gnuplot

Dekoratora używa się wstawiając linijkę zaczynającą się przed definicją dekorowanego obiektu (klasy czy funkcji).

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

TRX API opis funkcji interfejsu

Zdarzenia Zdarzenia onload i onunload

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Instrukcja użytkownika Porównywarki cen Liquid

2018/10/16 20:47 1/5 3 Ekrany

Pogadanka o czymś, co niektórzy nazywają AJAX

Pracownia internetowa w każdej szkole (edycja jesień 2005)

Transkrypt:

ngular, cz. II 1/24 Angular, cz. II Tworzenie serwisów Web 2.0 dr inż. Robert Perliński rperlinski@icis.pcz.pl Politechnika Częstochowska Instytut Informatyki Teoretycznej i Stosowanej 10 kwietnia 2015

Angular, cz. II 2/24 AngularJS Strona projektu: https://angularjs.org/ Dokumentacja: https://docs.angularjs.org/api Tutorial: https://docs.angularjs.org/tutorial Przewodnik dla developerów: https://docs.angularjs.org/guide Kurs na CodeSchool: http://angular.codeschool.com/

Angular, cz. II 3/24 Dyrektywy, ng-include Dyrektywa ng-include: pozwala zastąpić wielokrotnie powtarzający się fragment kodu pozwala też na podzielenie większego kodu na mniejsze części fragment kodu umieszczamy w osobnym pliku html i dołączamy ng-include może być wykorzystana jako dyrektywa użytkownika (atrybut src): <ng-include src="">... </ng-include> albo jako atrybut w dowolnym znaczniku: <ANY ng-include="">... </ANY> Angular napotykając ng-include wywołuje zapytanie AJAX. Najpierw wczytywana jest cała strona, a następnie asynchronicznie dołączane jej fragmenty.

Angular, cz. II 4/24 Dyrektywy, ng-include, przykład Zawartość pliku index.html:... <h3> {{produkt.nazwa}} <em class="pull-right">{{produkt.cena currency}}</em> </h3>... Zawartość index.html po zmianie: (dodatkowe apostrofy wewnątrz cudzysłowu - ng-include oczekuje zmiennych)... <h3 ng-include=" produkt-tytul.html "></h3> <h4 ng-include="sklep.nazwapliku"></h4>... Zawartość produkt-tytul.html {{produkt.nazwa}} <em class="pull-right">{{produkt.cena currency}}</em>

Angular, cz. II 5/24 Własne dyrektywy (ang. custom directives) Dyrektywa ng-include działa ale... Preferowany sposób używania szablonów to tworzenie własnych dyrektyw. W dyrektywach użytkownika można używać dyrektyw wbudowanych, np. ng-show. Do własnych dyrektyw można, a nawet warto dołączać kontrolery. Własna dyrektywa może wyglądać np.: <produkt-tytul></produkt-tytul> <h2 produkt-tytul></h2> Własne dyrektywy do działania wymagają jednak dodatkowego kodu. Dlaczego więc je używamy?

ngular, cz. II 5/24 Własne dyrektywy (ang. custom directives) Dyrektywa ng-include działa ale... Preferowany sposób używania szablonów to tworzenie własnych dyrektyw. W dyrektywach użytkownika można używać dyrektyw wbudowanych, np. ng-show. Do własnych dyrektyw można, a nawet warto dołączać kontrolery. Własna dyrektywa może wyglądać np.: <produkt-tytul></produkt-tytul> <h2 produkt-tytul></h2> Własne dyrektywy do działania wymagają jednak dodatkowego kodu. Dlaczego więc je używamy? Pozwalają pisać kod html, który wyraża zachowanie naszej aplikacji.

Angular, cz. II 6/24 Własne dyrektywy wyrażają zachowanie aplikacji Zwykle kod html pokazuje tylko strukturę, nie mówi nic o zachowaniu strony. Własne dyrektywy pozwalają na wyrażenie tego, co dany fragment szablonu robi (ekspresyjność, wyrazistość). <aside class="col-sm-3"> <ksiazka-okladka></ksiazka-okladka> <h4><ksiazka-ranking></ksiazka-ranking></h4> </aside> <div class="col-sm-9"> <h3><ksiazka-tytul></ksiazka-tytul></h3> <ksiazka-autorzy></ksiazka-autorzy> <ksiazka-opis></ksiazka-opis> <ksiazka-rodzaj></ksiazka-gatunek> </div>

Angular, cz. II 7/24 Własne dyrektywy - rodzaje Dyrektywy rozwijające, włączające zdefiniowane szablony - najprostszy rodzaj. Definiuje się własny znacznik albo atrybut, który pokazuje albo rozwija szablon. Szablony takie mogą też zawierać kontroler czyli jakąś funkcjonalność jeśli jest potrzebna. Dyrektywy do wyrażania złożonych interfejsów użytkownika. Dyrektywy do wywołujące zdarzenia i rejestrujące uchwyty do zdarzeń. Dyrektywy pozwalające na wykorzystanie zdefiniowanych komponentów.

Angular, cz. II 8/24 Definiowanie własnej dyrektywy I Dyrektywa <produkt-tytul></produkt-tytul> wymaga następującej definicji: app.directive( produkttytul, function(){ return { restrict: E, templateurl: produkt-tytul.html }; }); app.directive(); - dyrektywy w Angular. Pierwszy argument to nazwa dyrektywy. Myślinik w nazwie w HTML zmienia się na dużą literę w nazwie JavaScript. Drugi argument to anonimowa funkcja, ktora zwraca obiekt definiujący dyrektywę (ang. directive definition object). Obiekt definiujący dyrektywę to, najprościej mówiąc, konfiguracja określająca jak dyrektywa ma działać.

Angular, cz. II 9/24 Definiowanie własnej dyrektywy II Dyrektywa <produkt-tytul></produkt-tytul> wymaga następującej definicji: app.directive( produkttytul, function(){ return { restrict: E, templateurl: produkt-tytul.html }; }); Dwie opcje konfiguracyjne: restrict - określa typ dyrektywy. E od słowa Element czyli dyrektywa będzie nowym elementem HTML. templateurl - zawiera URL szablonu, który chcemy pozwiązać z definiowaną dyrektywą. Dyrektywę definiujemy wewnątrz modułu, np. w pliku app.js. Unikamy samoamkniętych znaczników: <produkty-tytul/> - niektóre przeglądarki źle współpracują z dowolnymi samozamkniętymi znacznikami.

Angular, cz. II 10/24 Definiowanie własnej dyrektywy III Definicja dyrektywy będącej atrybutem znacznika Dyrektywa <h3 produkt-tytul></h3> wymaga następującej definicji: app.directive( produkttytul, function(){ return { restrict: A, templateurl: produkt-tytul.html }; }); restrict - określa typ dyrektywy. A od słowa Attribute czyli dyrektywa będzie atrybutem elementu HTML. Po załadowaniu kod może być następujący: <h3 class="ng-binding" produkt-tytul="">aparat fotograficzny <em class="pull-right ng-binding">458,99 zł</em> </h3>

Angular, cz. II 11/24 Własne dyrektywy zawierające kontroler I Fragment strony HTML korzystający z kontrolera przenosimy do osobnego pliku HTML. Fragment związany z panelami produktów na stronie: <div ng-controller="panelcontroller as panel">... </div> Zamieniamy na: <produkty-panel ng-controller="panelcontroller as panel">... </produkty-panel> Tworzymy dyrektywę: app.directive( produktypanel, function(){ return { restrict: E, templateurl: produkty-panel.html, }; }); Przydało by się przenieść kontroler do utworzonej dyrektywy...

Angular, cz. II 12/24 Własne dyrektywy zawierające kontroler II Obiekt definiujący dyrektywę zawiera dwie dodatkowe opcje konfiguracyjne: controller - określa funkcjonalność kontrolera przypisanego do dyrektywy. Tutaj przenosimy funkcjonalność kontrolera, który chcemy związać z definiowaną dyrektywą. controlleras - określa alias, jakim będziemy się podługiwać w obszarze zdefiniowanej dyrektywy. W naszym przypadku będzie to: controlleras: panel. app.directive( produktypanel, function(){ return {... controller: function() {... }, controlleras: panel, }; }); Wygodnie jest mieć funkcjonalność razem ze zdefiniowaną dyrektywą.

Angular, cz. II 13/24 Własne dyrektywy zawierające kontroler III Całość dyrektywy przedstawia się następująco: app.directive( produktypanel, function(){ return { restrict: E, templateurl: produkty-panel.html, controller: function() { this.tab = 1; this.settab = function(stab) { this.tab = stab; }; this.isselected = function(stab) { return this.tab === stab; }; }, controlleras: panel, }; });

Angular, cz. II 14/24 Moduły Kiedy nasz kod robi się za duży warto podzielić go na moduły. Tworzymy nowy plik, np. produkty.js, w którym umieszczamy kod: (function(){ var app = angular.module( sklep-produkty, [ ]); app.directive( produkttytul, function(){... }); app.directive( produktypanel, function(){... }); app.directive( galeria, function(){... }); })(); angular.module(); - definicja nowego modułu. sklep-produkty to nazwa modułu. W nawiasach kwadratowych są zależności. Ponowne użycie zmiennej app (taka sama nazwa w głównym module aplikacji) nie stwarza problemu - obie zmienne mają zasięg ograniczony wewnątrz modułów.

Angular, cz. II 15/24 Moduły - zależności W głównym module aplikacji dodajemy utworzony moduł: (function(){ var app = angular.module( sklep, [ sklep-produkty ]); })(); app.controller( StoreController, function(){... });... Dodatkowo należy dołączyć plik nowego modułu do strony: <script type="text/javascript" src="produkty.js"></script>

Angular, cz. II 16/24 Usługi Usługi pozwalają nam m.in. na pobranie danych z zewnętrznego źródła. Lista produktów w naszych przykładach powinna być pobierana z jakiegoś API, w naszym przypadku JSON. Produkty wykorzystywane w przykładach dostępne poprzez stronę http://www.json-generator.com/api/json/get/binywejauw?indent=2 Zawartość: [ { "komentarze": [ { "autor": "felek77@domena.pl", "tresc": "Bardzo fajny aparat. Uwielbiam go!", "ocena": 5 },... ]

Angular, cz. II 17/24 Usługi w Angular Angular posiada wiele wbudowanych usług. Usługi pozwalają dodać do naszego kontrolera dodatkową funkcjonalność. Wszystkie usługi wbudowane w Angular zaczynają się od znaku $. Usługi pozwalają na: Pobranie danych w postaci JSON z usługi internetowej (web service) przez usługę $http. Zapis logów do konsoli JavaScript za pośrednictwem usługi $log. Filtrowanie zawartości tablic za pomocą usługi $filter.

Angular, cz. II 18/24 Usługa $http Usługa $http pozwala nam wykonać asynchroniczne zapytanie do serwera. Można użyć $http jako funkcji z obiektem zawierającym opcje: $http({ method: GET, url: /produkty.json }); Można też użyć jednej z metod usługi $http: $http.get( /produkty.json, { apikey: myapikey }); Obie metody zwracają objekt Promise. Na takim obiekcie można wykonać funkcje zwrotne.success() albo.error(). Jeśli usługa $http pobiera JSON to wynik zostanie automatycznie przekształcony do objektu czy tablicy JavaScript.

Angular, cz. II 19/24 Usługa $http Kontroler musi poinformować Angular jakich usług potrzebuje. W tym celu używamy takich dziwnych wyrażeń tablicowych app.controller( PrzykladowyKontroler, [ $http, function($http){ } ]); $http oznacza nazwę usługi; w tablicy najpierw określamy nazwy usług. $http to usługa przekazywana jako argument do funkcji kontrolera; w ten sposób można użyć $http wewnątrz kontrolera. Taki sposób przekazywania usług potrzebnych kontrolerowi nazywa się wstrzykowaniem zależności (ang. dependency injection). Injector przekazuje usługi wymagane przez kontroler jako argumenty. Stąd wstrzykiwanie zależności, bo injector wstrzykuje zależnośći (w tym przypadku usługi) do funkcji kontrolera jako argumenty. Wyrażenie w przypadku dwóch usług: app.controller( JakisKontroler, [ $http, $log, function($http, $log){ } ]);

Angular, cz. II 20/24 Usługa $http - przykład Przykład wykorzystania usługi $http w kontrolerze z pobraniem listy produktów przy wykorzystaniu funkcji zwrotniej success(). (function(){ var app = angular.module( sklep, [ sklep-produkty ]); }]); })(); app.controller( StoreController, [ $http, function($http){ this.produkty =??? $http.get( /produkty.json ).success(function(data){??? = data; }); Lista produktów jest zwrócona w obiekcie data. Dane należy przypisać do this.produkty ale nie możemy się odwołać do tych danych wewnątrz funkcji zwrotnej. this wewnątrz funkcji zwrotnej wskazuje na usługę $http. Więc?

Angular, cz. II 21/24 Usługa $http - przykład Przykład wykorzystania usługi $http w kontrolerze z pobraniem listy produktów przy wykorzystaniu funkcji zwrotniej success(). (function(){ var app = angular.module( sklep, [ sklep-produkty ]); }]); })(); app.controller( StoreController, [ $http, function($http){ var sklep = this; $http.get( /produkty.json ).success(function(data){ sklep.produkty = data; }); Lista produktów jest zwrócona w obiekcie data. Dane należy przypisać do this.produkty ale nie możemy się odwołać do tych danych wewnątrz funkcji zwrotnej. this wewnątrz funkcji zwrotnej wskazuje na usługę $http. Więc? Użyjemy zmiennej pomocniczej.

Angular, cz. II 22/24 Usługa $http - przykład Wykonanie zapytania asynchronicznego i zwrócenie wyniku może zająć jakiś czas. Strona nie będzie na to czekać i może się załadować bez listy produktów. Dobrym pomysłem będzie wstępne zainicjowanie zmiennej: sklep.produkty = [ ];

Angular, cz. II 23/24 Usługa $http - dodatkowa funkcjonalność Poza metodą get() usługa $http zawiera jeszcze post(), put(), delete(),... $http.post( /sciezka/do/zasobow.json, { param: value }); $http.delete( /sciezka/do/zasobow.json ); Można również używać dowolnych innych metod usługi $http korzystając z obiektów z konfiguracją: $http({ method: OPTIONS, url: /sciezka/do/zasobow.json }); $http({ method: PATCH, url: /sciezka/do/zasobow.json }); $http({ method: TRACE, url: /sciezka/do/zasobow.json });

Angular, cz. II 24/24 Warto zobaczyć https://egghead.io/ - Kursy video dla AngularJS, React, D3 i innych kluczowych technologi internetowych. https://thinkster.io/ - Nauka nowoczesnych technologii internetowych, również zawiera filmy video https://kapeli.com/dash - Dokumentacja offline do bardzo wielu API technologi internegowych - warto pobrać!