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

Podobne dokumenty
WYKŁAD 1 ANGULARJS CZĘŚĆ 1

ANGULARJS TWORZENIE APLIKACJI INTERNETOWYCH

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Użycie filtrów w widoku

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

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

Wzorce architektoniczne

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

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

Podstawy technologii WWW

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

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

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

Zajęcia 4 - Wprowadzenie do Javascript

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku.

Podstawy JavaScript ćwiczenia

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

Deklaracja struktury w C++

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

TECHNOLOGIE INTERNETOWE WYKŁAD 6. JavaScript Funkcje i obiekty

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Czym są właściwości. Poprawne projektowanie klas

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Informatyka II. Laboratorium Aplikacja okienkowa

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

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

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

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

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

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

REFERAT O PRACY DYPLOMOWEJ

Exulto Software House

Rys.2.1. Drzewo modelu DOM [1]

Wprowadzenie do programowania aplikacji mobilnych

HTML, CSS i JavaScript / Laura Lemay, Rafe Colburn, Jennifer Kyrnin. Gliwice, cop Spis treści

Komunikacja między klientem, a skryptem PHP, oraz operacje na plikach

Pliki zorganizowano w strukturze drzewiastej odzwierciedlając strukturę logiczną aplikacji:

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Zdarzenia Zdarzenia onload i onunload

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

Rys.2.1. Trzy warstwy stanowiące podstawę popularnego podejścia w zakresie budowy stron internetowych [2]

Wybrane działy Informatyki Stosowanej

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

WYMAGANIA EDUKACYJNE. Witryny i Aplikacje Internetowe klasa I

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

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

XML extensible Markup Language. część 5

Pracownia internetowa w każdej szkole (edycja Jesień 2007)

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

Szkolenie. IBM Lotus - Podstawy projektowania aplikacji w Domino Designer 8.5. Strona szkolenia Terminy szkolenia Rejestracja na szkolenie Promocje

Efektywne tworzenie aplikacji webowych z wykorzystaniem AngularJS, HTML5 i JavaScript

Ajax. 1. Wprowadzenie. 2. Aplikacja serwerowa

Laboratorium 1 Wprowadzenie do PHP

Funkcje i instrukcje języka JavaScript

KASK by CTI. Instrukcja

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

JAVAScript w dokumentach HTML (2)

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Podręcznik użytkownika Obieg dokumentów

Aplikacje webowe w obliczu ataków internetowych na przykładzie CodeIgniter Framework

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Formularze HTML. dr Radosław Matusik. radmat

ASP.NET MVC. Grzegorz Caban 20 stycznia 2009

Delphi podstawy programowania. Środowisko Delphi

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

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

Wykład 03 JavaScript. Michał Drabik

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

app/ - folder zawiera pliki konfiguracyjne dla całej aplikacji Można wybrać sposób zapisu konfiguracji: YML, XML, PHP

PHP: bloki kodu, tablice, obiekty i formularze

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

E-commerce. Genialnie proste tworzenie serwisów w PHP i MySQL.

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

Laboratorium 7 Blog: dodawanie i edycja wpisów

do drukowania tekstu służy funkcja echo <?php echo "hello world!";?> jeżeli użyjemy jej kilka razy: <?php

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

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

edycja szablonu za pomocą programu NVU

INFORMATYKA TECHNICZNA Badanie możliwości wykorzystania interfejsu automatyzacji OLE w systemie CAx

Przekierowanie portów w routerze - podstawy

Umieszczanie kodu. kod skryptu

MVVM Light Toolkit. Julita Borkowska

JAVAScript w dokumentach HTML - przypomnienie

Backend Administratora

Tutorial prowadzi przez kolejne etapy tworzenia projektu począwszy od zdefiniowania przypadków użycia, a skończywszy na konfiguracji i uruchomieniu.

Od programowania wizualnego do tekstowego

Dokumentacja techniczna. Młodzieżowe Pośrednictwo Pracy

Ćwiczenie 8. Kontrolki serwerowe

Instrukcja obsługi. Agencja IArt 2009r.

Aplikacje WWW - lab 5

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Płatny dostęp do treści przez system płatności PayU na WordPressie [TUTORIAL]

Zmiana logo. Dziękujemy za wybór naszych rozwiązań. apjoo od Apláuz. Wspólnie przebrniemy przez proces konfiguracji strony www i wstawiania treści.

Jak okiełznać frontend w Django? Piotr Maliński

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

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

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

Transkrypt:

Zrozumienie tego artykułu jest kluczowe aby móc tworzyć aplikacje w AngularJS. Do tej pory powinieneś wiedzieć czym jest Angular, umieć utworzyć moduł główny aplikacji i podpiąć do niego kontroler. Zdefiniowany przez nas moduł oraz kontroler zostają załadowane do pamięci w fazie ładowania. Następnie w fazie kompilacji AngularJS analizuje statyczne drzewo DOM dokumentu zbudowane ze znaczników HTML. W momencie natrafienia na dyrektywy ngapplication oraz ng-controller zostaje utworzony nowy $scope. Czym jest $scope W większości języków programowania możemy definiować własne zasięgi zmiennych, w których są one widoczne. W C++ każda funkcja posiada swój własny zasięg ograniczony przez nawiasy klamrowe. Nic nie stoi na przeszkodzie aby w środku funkcji zagnieździć kolejne nawiasy klamrowe definiujące nowy zakres widoczności. $scope w AngularJS jest niczym innym jak zasięgiem widoczności danego kontrolera i tworzy on warstwę widok-model wzorca MVVM. Każdy kontroler posiada swój unikalny $scope do którego przypięte są funkcje oraz zmienne widoczne w warstwie widoku. $scope jest jedynym elementem, który jest w stanie wystawić dane dla widoku i komunikować się z widokiem. W czystym JavaScripcie zasięgi zmiennych tworzone były poprzez funkcje anonimowe, w AngularJS posiadamy kontrolery, które także są funkcjami. $scope zostaje utworzony automatycznie dla każdego kontrolera, który zostanie zainicjalizowany dyrektywą ng-controller (lecz nie tylko o czym później). Oprócz tego, podczas inicjalizacji aplikacji za pomocą dyrektywy ng-app zostaje utworzony tzw. $rootscope, a więc zasięg bazowy dla wszystkich innych. W przypadku zagnieżdżonych kontrolerów zasięgi także zostają zagnieżdżone. Każdy $scope posiada referencję do dziecka child-scope oraz do rodzica parent-scope. Rodzicem nadrzętnym jest $rootscope. Nie jest to informacja, która może Ci się przydać na początku kursu, jednak warto o takim fakcie wiedzieć. Rozwieje to Twoje wątpliwości szczególnie podczas przeglądania $scope za pomocą wtyczki nginspector. Dwustronne bindowanie danych Potęgą frameworków JavaScriptowych jest niezaprzeczalnie mechanizm dwustronnego bindowania danych two-way data binding. Jest to element obiektu $scope i zapewnia dynamiczne odświeżanie danych pomiędzy widokiem a view-modelem (czy też Karol Trybulec p-programowanie.pl

upraszczając kontrolerem). Każdy kto pisał cokolwiek w JavaScript lub jego młodszym bracie jquery wie jak uciążliwe jest wymienianie danych pomiędzy elementami HTML a skryptem. W AngularJS nie trzeba się o to martwić. Wyrażenia Zanim przetestujemy mechanizm dwustronnego bindowania danych trzeba dowiedzieć się czym są wyrażenia. Wyrażenia w AngularJS służą do przekazywania danych pomiędzy kontrolerem a widokiem (w jedną stronę!): Istnieją dwie metody na przekazanie wyrażenia do widoku: Przekazanie wyrażenia za pomocą nawiasów klamrowych np. {{wyrażenie Przekazanie wyrażenia za pomocą wbudowanej dyrektywy np. ngbind="wyrażenie" Wyrażenia w AngularJS są takie same jak w JavaScript, mogą zawierać zmienne, literały oraz operatory. W celu przetestowania wyrażeń proponuję podpiąć do $scope zmienną o dowolnej treści. Przykładowo utworzę atrybut imie o wartości Karol. Definiowanie atrybutów i funkcji obywa się tak samo jak w przypadku JavaScript.: $scope.imie = "Karol" <p>wynik dodawania + to {{+</p> <p>masz na imię {{imie<p> Karol Trybulec p-programowanie.pl

Po otworzeniu powyższego kodu w przeglądarce Chrome przekonasz się, że zmienne zostały wyświetlone w poprawny sposób. Nawiasy klamrowe można zastąpić dyrektywą ng-bind: <p>masz na imię {{imie<p> <p>masz na imię <span ng-bind="imie"></span><p> Wynik dwóch powyższych linijek będzie ten sam. Jedyna różnica w przypadku posługiwania się dyrektywą jest to, że musi być ona osadzona w jakimś znaczniku HTML. Z tego powodu konieczne było utworzenie dodatkowego spana wewnątrz akapitu aby można było zbindować do niego wartość zmiennej. Z tego powodu bardziej popularne i wygodniejsze są nawiasy klamrowe. Spójrzmy jak wygląda struktura zakresów podglądając je za pomocą wtyczki nginspector: Wyraźnie widać moduł, podpięty do niego $rootscope oraz jego dziecko czyli $scope naszego kontrolera. Uwaga, aby dodatek nginspector działał plik jaki badamy musi być serwowany przez serwer np. przez serwer lokalny. Odwołując się do pliku za pomocą ścieżki file:// wtyczka nie uruchomi się. Szybki darmowy serwer HTTP jest wbudowany np. w npm (httpserver). Można użyć też XAMPA lub innych podobnych. Modele Użycie modelu dostarcza nam 0% prawdziwego mechanizmu dwustronnego bindowania, z którego słyną frameworki JavaScriptowe. W przypadku modelu bindowanie odbywa się w dwie strony, a więc zmiany które zajdą w formularzu są widocznie w kontrolerze oraz na odwrót: Modele można podpinać wyłącznie do kontrolek HTMLowych czyli np. do elementów input. Jedyną możliwością podpięcia modelu jest użycie wbudowanej dyrektywy ng-model. Karol Trybulec p-programowanie.pl

Przykładowo: $scope.imie = "Karol" <p>masz na imie <input ng-model="imie" /><p> Powyższy kod podpina do pola tekstowego model $scope.imie. Po uruchomieniu kodu wartość zmiennej zostanie automatycznie zbindowana do widoku. Pełny przykład bindowania danych Sprawdźmy teraz, dlaczego AngularJS jest tak fajny jak o nim mówią. Poznaliśmy podstawowe mechanizmu umożliwiające bindowania danych, spróbujmy je ze sobą połączyć. W tym celu zdefiniujmy model dla zmiennej imie oraz nazwisko a następnie za pomocą wyrażenia wyświetlmy jak nazywa się użytkownik: $scope.imie = ""; $scope.nazwisko = ""; <p>imię: <input ng-model="imie" /></p> <p>nazwisko: <input ng-model="nazwisko" /></p> <br> <p>nazywasz się {{imie {{nazwisko.<p> W powyższym przykładzie użytkownik może wpisać do dwóch pól tekstowych wartości Karol Trybulec p-programowanie.pl

tekstowe. Jest dla nich zdefiniowany model. Za pomocą wyrażeń wartość zostaje automatycznie wyświetlona niżej jako zwykły element strony HTML: Jak widać na załączonym przykładzie AngularJS odświeża dane ze $scope w czasie rzeczywistym. Jest to niewątpliwie jego największa zaleta. Używając czystego JavaScriptu ilość utworzonego kodu byłaby ogromna. Nawet używając jquery pomógłby on jedynie szybciej załapać uchwyt dla poszczególnego pola tekstowego nic więcej. Grupowanie w obiekty i czysty scope Pisząc aplikacje w AngularJS musimy dbać o porządek w kontrolerze a przede wszystkim o porządek w $scope. Nigdy nie należy podpinać zmiennych bezpośrednio do scope szczególnie jeżeli tworzą jakiś model biznesowy. Powyższy przykład pokazany dla celów naukowych jest błędny, o wiele lepszym rozwiązaniem będzie zgrupowanie danych osobowych do obiektu osoba. Lepsza organizacja powyższego przykładu: $scope.osoba = { imie: "", nazwisko: "" ; <p>imię: <input ng-model="osoba.imie" /></p> <p>nazwisko: <input ng-model="osoba.nazwisko" /></p> <br> <p>nazywasz się {{osoba.imie {{osoba.nazwisko.<p> $scope jest obiektem ważnym, tworzy warstwę widoku-modelu i jest odpowiedzialny za bindowanie danych pomiędzy kontrolerem a widokiem. Jego zaśmiecenie powoduje znaczne straty wydajności w działaniu aplikacji. Odpowiednie grupowanie atrybutów i podpinanie ich jako atrybutów obiektów pomaga w utrzymaniu porządku. W żadnym wypadku nie możemy uszkodzić albo nadpisać zakresu, możemy jedynie Karol Trybulec p-programowanie.pl

dodawać do niego atrybuty i funkcje, które są nam potrzebne. Istnieją też inne sposoby na dbanie o lekkość zakresu i zostaną opisane w kolejnych artykułach. Karol Trybulec p-programowanie.pl