od Podstaw
7 godz. 6 min · Vue.js · Full-stack i Programowanie
Piotr PalarzWeb DeveloperAby zacząć korzystać z Vue, wystarczy dodać do strony jeden element <script> i zacząć rozszerzać HTML o nowe możliwości prezentacji danych, które w całości kontrolujemy z poziomu kodu JavaScript. Najlepsze jest jednak to, że gdy dane się zmienią, Vue odzwierciedli wszystkie zmiany na stronie. Koniec zatem z odwoływaniem się z poziomu kodu JavaScript do elementów z drzewa DOM i "ręczną" ich manipulacją!Czy łatwość użycia Vue oznacza, że jest to framework prosty i nienadający się do budowania ambitnych aplikacji internetowych? Absolutnie nie! Jeżeli potrafisz korzystać z workflow opartego na webpacku, znasz nową składnię ES6 i chcesz swoje projekty dzielić na wiele uporządkowanych plików - możesz w ten sposób pracować. Jeśli jednak przy innych frameworkach przytłoczyły Cię wszystkie dodatkowe narzędzia i nie potrafiłeś się skupić na najważniejszym, czyli poznawaniu frameworka, to tutaj tego problemu nie doświadczysz.
W kursie tym krok po kroku poznasz ten lekki, acz potężny framework. Zaczniemy od instalcji i obowiązkowego projektu "Hello World!". Dowiesz się czym jest "Virtual DOM" i dlaczego Vue z niego korzysta. Następnie zobaczysz jak kontrolować wybraną część strony internetowej za pomocą metod, właściwości i dynamicznych atrybutów. Aby zrozumieć reaktywność Vue, przyjrzymy się konstrukcjom języka JavaScript, które ją umożliwiają.
Aby aplikacja mogła być interaktywna, nie może być obojętna na działania użytkownika. Z tego powodu zobaczysz, jak przypisywać obsługę zdarzeń, takich jak np. kliknięcie, jak do funkcji przekazywać parametry oraz jak korzystać z natywnego obiektu Event. Nie zabraknie również informacji o tym, jak modyfikować obsługę zdarzeń tak, by np. przechwycić jednoczesne wciśnięcie wybranej kombinacji klawiszy.Jak się przekonasz, dyrektywy Vue pozwolą Ci na manipulację nie tylko zachowaniem, ale i wyglądem elementów HTML. Omówimy dokładnie jak kontrolować przypisywane klasy CSS, a także liniowe style. Wszystko to oczywiście na praktycznych przykładach! Poznasz również sposoby warunkowego wyświetlania elementów, a także iteracji. Już na tym etapie będziesz gotowy do stworzenia swojego pierwszego, praktycznego projektu. Będzie do Counter, a zatem licznik odliczający od 10 do 0. Jeśli kiedykolwiek korzystałeś z biblioteki jQuery, zobaczysz totalnie inne podejście - proste i czytelne.
W jednym z rozdziałów kursu omówimy dokładnie techniki pracy z formularzami. Zobaczysz jak przechwytywać wpisywane przez użytkownika dane, na wszystkich rodzajach pól, jakie oferuje język HTML. Abyś wszystko jak najlepiej zrozumiał, spróbujemy wspólnie zaimplementować tzw. dwukierunkowe wiązanie danych, które Vue oferuje za pomocą jednej dyrektywy.Z kursu dowiesz się także czym są oraz jak tworzyć własne filtry, jak odwoływać się do elementów z drzewa DOM, gdy jest to konieczne, a także co oferują nam własne dyrektywy.
Jedną z największych zalet frameworka Vue.js jest możliwość tworzenia komponentów. Są to własne elementy HTML, które możemy umieszczać w wybranych miejscach naszej aplikacji. Element taki to jednak nie tylko wygląd, który definiujemy za pomocą szablonu, ale także (a może i przede wszystkim) logika, kontrolowana z poziomu kodu JavaScript.Zobaczysz jak zarejestrować własny komponent lokalnie oraz globalnie, jak sprawić, aby był reużywalny, przyjmując różne dane oraz jak komunikować się pomiędzy komponentami, by aplikacja pozostawała w synchronizacji. W tym celu omówimy dwa kierunki komunikacji, najpierw rodzic-dziecko, a później dziecko-rodzic. Na tym etapie wykonamy bardzo ciekawy, praktyczny projekt. Będzie to tabela napędzana danymi. Każdy wiesz tabeli prezentował będzie dane jednej osoby, a kliknięcie ikony kosza pozwoli na jej usunięcie. Ikona edycji zaś, zamieni wiesz w pola input, za pomocą których zaktualizujemy dane. W projekcie tym wykorzystamy niemal całą wcześniej zdobytą wiedzę!
Vue.js oferuje możliwość animowania elementów, kiedy są one pokazywane lub ukrywane. I omówienia tego tematu nie mogło również zabraknąć w tym kursie. Poznasz sposoby na animowanie elementów w użyciem CSS, zobaczysz jak animować podmianę jednego komponentu na drugi, a także jak uzyskać taki efekt dla listy elementów. Mając już wiedzę z zakresu tworzenia własnych komponentów, stworzymy wspólnie element, który pozwoli na animację innych, zawartych w nim elementów. W tym celu zintegrujemy nasz komponent z biblioteką animate.css.
Przez większą część kursu pracować będziemy pisząc kod JavaScript w standardzie ES5, a więc tym najpopularniejszym. Nie będziemy również korzystać z żadnych skomplikowanych narzędzi. Wszystko to po to, abyś mógł jak najlepiej zrozumieć sedno Vue.js, a nie zastanawiać się, który zapis jest specyficzny dla tego frameworka, a który to część nowego standardu JavaScript lub syntactic sugar dodany przez narzędzie uruchamiane z poziomu terminala.Nie oznacza to jednak, że z Vue nie da się pracować w sposób nowoczesny! Oczywiście jest taka możliwość i doskonale się o tym przekonasz. W jednym z rozdziałów kursu omówimy narzędzie vue-cli, które pozwoli nam przygotować startowy projekt nowej aplikacji, a także środowisko skonfigurowane z użyciem webpack'a, które umożliwi nam wydajną pracę. Na tym etapie zobaczysz, że komponentu Vue można tworzyć w zupełnie oddzielnych plikach z rozszerzeniem .vue, gdzie umieścimy zarówno szablon jak i logikę komponentu, a także (opcjonalnie) jego style CSS.Kurs ten zwieńczymy stworzeniem nowoczesnej aplikacji, wykorzystując najnowszy zapis ES6 i workflow stworzony z użyciem vue-cli. Projektem tym będzie Slideshow, a więc galeria zdjęć. Stworzymy od podstaw kilka komponentów, dodamy własny preloader obrazów, a także możliwość pobierania listy obrazów z serwera. Do tego celu wykorzystamy popularną bibliotekę axios, która umożliwia łatwe wykonywanie zapytań HTTP. Pod koniec dodamy do naszej aplikacji również routing, aby na pasku adresu odzwierciedlać aktualnie wyświetlany obraz, a także umożliwić nawigację za pomocą przycisków "Wstecz" i "Do przodu" dostępnych w przeglądarce internetowej. To zadanie ułatwi nam bardzo popularny plugin dla Vue, który nazywa się vue-router. Zobaczysz jak go zainstalować, a także skonfigurować. Następnie omówimy dynamiczne parametry, które odczytamy w komponencie. Finalnie zaktualizujemy adres URL z poziomu kodu JavaScript.Ostatnim krokiem jaki wykonamy, będzie stworzenie builda produkcyjnego naszej aplikacji, który gotowy będzie do na stronę internetową.
Kurs ten jest dla wszystkich osób, które znają już język JavaScript i sposoby na pracę z Obiektowym Modelem Dokumentu. Aby go rozpocząć, nie jest wymagana znajomość innych frameworków, ale taka wiedza na pewno nie zaszkodzi, a pomoże lepiej zrozumieć te zagadnienia, które są dla nich wspólne. Nie jest również wymagana wiedza z zakresu EcmaScript 6 czy webpack'a, lecz na pewno będzie pomocna w ostatim rozdziale tego kursu. Nieważne zatem czy Vue.js będzie pierwszym frameworkiem, który poznasz, czy będzie to odskocznia od React'a czy Angulara - na pewno to narzędzie Cię zaskoczy!
Vue.js 2.5.x
W tej lekcji rzucimy okiem na modyfikatory eventów. Zauważ,
że mam taki prosty formularz i jeżeli kliknę wyślij to strona się przeładowuje
i tutaj jest ten hash dodawany. Wyobraź sobie, że chcielibyśmy zrobić
event preventdefault. Na pewno wielokrotnie to robiłeś
w tak zwanym czystym JavaScripcie czy z użyciem jQuery, natomiast pokażę
ci jak to zrobić z użyciem Vue. Ten hash się pojawi tam dlatego, że formularz
ma tutaj taki action, ale gdyby tutaj był URL do serwera, oczywiście cała strona
tak czy siak byłaby przeładowana właśnie na ten adres. Natomiast teraz chcielibyśmy na
zdarzenie submit nasłuchiwać, po pierwsze i wiesz już jak to robić, bo
to robiliśmy wcześniej, czyli albo v-on submit lub
zdarzenie sposób skrótowy, czyli submit. No i tutaj może
będę chciał nazwać metodę submit. Ta zbieżność nazwy zdarzenia i metody
jest przypadkowa, ona nie ma znaczenia. Wiemy, że to będzie nazwa metody do
wywołania. No i jeżeli teraz w methods bym sobie dodał metodę submit, będzie
to funkcja. Pokazałem ci już, że event będzie tam automatycznie przekazywany,
to mogę zrobić event preventdefault. Czyli to standardowo zadziała.
Zauważ, że po kliknięciu przycisku tutaj nic się nie zmienia. Czyli zapobiegliśmy
domyślnej akcji przeglądarki. Natomiast ciekawa wiadomość jest taka, że mamy coś takiego
jak modyfikatory eventów i będziemy mogli z nich skorzystać, nie
będziemy musieli tutaj tego robić bezpośrednio na przykład na evencie, więc
tutaj mając submit mogę po kropce napisać prevent
i dokładnie tak samo by to zadziałało gdyby tutaj nie było małpki tylko v-on
submit i później kropka prevent i to jest modyfikator dla tego
eventu. Zobacz, że to zadziała tak samo, od razu zapobiegamy domyślnej
akcji przeglądarki. Możemy zatem zrobić sobie coś takiego, że tutaj
w data dodamy taką właściwość jak send, czyli czy wysłane, ustawimy
to na false, a w przypadku wysyłania takiego formularza o tutaj możesz event
przechwycić jeśli byś chciał. Powiedzmy, że wykonały jakąś walidację, na razie tego nie będziemy
robić i wyślemy formularz i ustawimy this.sent
na wartość true. Tutaj mógłbyś sobie zrobić na przykład settimeout
na dwie sekundy, żeby sobie to zasymulować, ale ja zostawię to w takiej formie i co
ciekawe oczywiście w Vue możesz w bardzo prosty sposób zablokować
przycisk jeżeli raz już wyślemy formularz, czyli tutaj moglibyśmy zbindować disabled,
taki atrybut i napiszemy sobie tutaj send,
czyli jeżeli send ma wartość prawdziwą, chcemy ten przycisk wyłączyć, zobacz. Po
pierwsze zapobiegliśmy domyślnej akcji przeglądarki co pozwoliłoby nam zebrać dane z
tego formularza. Po drugie moglibyśmy go Ajax'em wysłać i zablokować przycisk,
żeby ponownie to nie wysyłać. Jak takie dane można sobie synchronizować z tych
pól, jeszcze się w tym kursie dowiesz. Natomiast w tej lekcji chciałem ci pokazać, że
mamy modyfikatory dla eventów i tych modyfikatorów jest więcej
i możemy przejść na stronę dokumentacji Vue i tutaj pokrótce
ci je przedstawie. Nie będę już w kodzie tego pokazywał. Myślę, że jeżeli pracowałeś z obiektowym modelem
dokumentu, doskonale będziesz wiedział o co chodzi. A więc możemy skorzystać z modyfikatora
stop, który wywoła po prostu event stoppropagation. To się
bardzo przydaje jeżeli na przykład klikamy gdzieś i rozwija nam się wyobraź
sobie takie menu kontekstowe i mamy już przypisane zdarzenie kliknięcia na przykład
na cały dokument. Jeżeli klikamy w dokument to to menu ma się ukryć. Problem
jest taki, że jeżeli klikamy wewnątrz takiego menu, to też jest rejestrowane zdarzenie
na dokumencie i ono nam się zamyka i wtedy do takiego menu możemy przypisać zdarzenie
kliknięcia właśnie z modyfikatorem stop, po to aby zrobić stoppropagation
i to działa tak, że jeżeli event zostanie zarejestrowane kliknięcie
na tym właśnie elemencie nie jest propagowane do góry na jego rodziców,
co za tym idzie również dokument nie zarejestruje takiego kliknięcia,
więc to jest to samo co natywnie event stoppropagation. Następnie
prevent, które już ci pokazałem. Następnie jest to capture, nie często się z tego korzysta,
ale jeżeli wiesz, co oznacza trzeci parametr w add event
listener, gdzie zazwyczaj piszemy false, jego można ustawić na true, to jest właśnie use capturing.
No to jeżeli skorzystasz z takiego modyfikatora, to jest tak jakbyś ustawił ten trzeci
parament w add event listener na wartość true. Następnie ciekawy
modyfikator self, który jeżeli dodamy, to oznacza, że zostanie
zarejestrowane kliknięcie tylko jeżeli klikniemy dokładnie w element o którym
mowa, do którego to przypisaliśmy, czyli jeżeli na przykład przepisałbym do tego diva
zdarzenie kliknięcia z modyfikatorem self, to jeżeli kliknę wewnątrz niego
w przycisk, to takie zdarzenie się nie odpali. Normalnie by się odpaliło, bo klikając
na dziecko takiego elementu klikam też na ten element właśnie przez to, że to
wszystko jest oparte na takim zjawisku dubbing'u, czyli
w momencie kiedy klikam na jakiś element to to zdarzenie propaguje sobie
do góry. Natomiast, jeżeli dodam sobie self, to oznacza, że muszę kliknąć na tego diva,
ale nie na ten przycisk, czyli wewnątrz diva, ale nie w ten przycisk. Konkretnie
muszę kliknąć w tego div'a, więc czasami może się to przydać i mamy jeszcze modyfikator
once, który oznacza, że zdarzenie ma się wykonać wyłącznie
raz. Przydatna rzecz, w jQuery też mieliśmy coś takiego jak one,
czyli zdarzenie wykona się tylko raz, a kolejne na przykład kliknięcie nie
będzie już brane pod uwagę. Oczywiście te modyfikatory nie tylko do kliknięcia, można
przypisywać, ale do każdego innego zdarzenia. W tej lekcji zatem
to wszystko, jak widzisz eventy można modyfikować za pomocą takich modyfikatorów,
najczęściej prawdopodobnie będziesz korzystał właśnie z tego, czyli prevent,
który wykonuje, widziałeś event preventdefault.