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
Poznałeś w tym kursie już wiele konstrukcji. Między innymi wyrażenia,
które można interpolować i wyświetlać za pomocą tych nawiasów klamrowych. Zobaczyłeś
również możliwość przypisywania event'ów. Czy wreszcie dyrektywy, które są po prostu
atrybutami. Natomiast, żeby dopełnić tutaj formalności, warto
żebyś poznał tutaj jeszcze jedną konstrukcję, która jest dostępna w Vue, a są to filtry
i teraz zobacz co przygotowałem mamy taką tabelkę gdzie wyświetlam jakiś użytkowników
i mamy datę urodzenia która nie wygląda zbyt przyjaźnie. Taka data
jest formacie iso i ona może być zwrócona często kiedy wysyłamy zapytanie
do serwera, a serwer pobiera jakieś dane z bazy danych i często
data właśnie tak wygląda. Nic nie stoi na przeszkodzie, żeby po stronie klienta w JavaScripcie
ją sobie sformatować. Jeżeli byśmy przekazali taki string do new date i tutaj
taką wartość, to będziemy mieli obiekt daty z którego można wyciągnąć wszystkie interesujące
nas informacje lub możemy skorzystać z jakiejś biblioteki. Takiej
jak na przykład moment js, którą ja podpiąłem do strony. Niemniej
jednak, w jaki sposób i gdzie powinniśmy tego formatowania dokonywać.
Zauważ, że ja wyświetlam sobie datę, która jest tutaj na przykład w pętli
w tym miejscu. Mamy tutaj birth date, no i ona wygląda jak wygląda.
Natomiast możemy stworzyć filtr, które nam ją zmodyfikuje i co
ważne z filtrów korzysta się w ten sposób, że tutaj gdzie mamy wyrażenia dodajemy
taki pipe i podajemy nazwę filtra. Możemy go nazwać date,
powiedzmy i teraz musimy go utworzyć, bo jeżeli zrobimy coś takiego Vue
powinno nam narzekać. Dokładnie tak też się stało, dlatego teraz
pokażę ci dwa sposoby na stworzenie filtra. Jeden będzie globalny,
piszemy Vue filter, podajemy jego nazwę, date, bo z takiej
skorzystaliśmy i następnie podajemy funkcję, która otrzymała value. To
co z tego z filtra zwrócimy zostanie podstawiony w tym miejscu. Value, które
otrzymamy będzie to ta wartość po lewej stronie pipe, czyli właśnie
wartości tej daty i teraz wystarczy, że tutaj tą datę w jaki sposób sobie
zmodyfikujemy. Zwróćmy ją na razie jako value, upewnijmy się, że walutavalue to
jest przekazywane. Tak też się dzieje i teraz pokażę ci jak z użyciem
moment.js możemy tę datę fajnie sobie sformatować. Zrobimy
to w ten sposób. Odwołam się to moment. Przekażę mu value i
następnie sformatuję ją w takim oto zapisie. Jeżeli zrobimy coś takiego jak
widzisz, data jest teraz ładnie sformatowana. Natomiast utworzyliśmy sobie filer
globalny i pytanie co to oznacza. To oznacza, że jeżeli mielibyśmy więcej
takich instancji Vue to każda z nich w swojej templatce mogłaby z tego
filtra korzystać. Później kiedy dowiesz się jak korzystać z komponentów oznaczałoby
to, że również wszystkie komponenty będą do takiego filtra miały dostęp. Natomiast
możemy utworzyć filtry lokalne dla danej instancji. Jest to
bardzo proste. Funkcje, którą mamy w tym miejscu będę chciał sobie skopiować,
natomiast to wykomentuje. Dodajemy tutaj klucz filters
i następnie nazwa filtra, date i funkcja,
która nas interesuje. Oczywiście możemy je sobie zaimportować w EcmaScript6 z zupełnie
innego miejsca wstawić tutaj i tak dalej, ale idea
jest taka, żeby one się znalazły na tej instancji tutaj w tych opcji konfiguracyjnych. Sprawdźmy,
efekt jest dokładnie taki sam. Natomiast ten filtr teraz będzie działał wyłącznie
w aplikacji, która jest pod identyfikatorem app kontrolowanej
przez tę konkretną instancję. Na koniec chciałbym ci pokazać, że możemy
również wywołując taki filter czy podając go
tutaj możemy go wywołać i przekazać mu jakieś parametr. Powiedzmy, że chcemy domyślnie,
aby formatować datę w takim formacie, ale aby również można było by przekazać
inny format, czyli chciałbym zrobić coś takiego. Tutaj przekazać może
za pomocą takich apostrofów, chociaż tutaj nie ma znaczenia i chciałbym
na przykład napisać d, następnie m i y.
Oczywiście ten format musi być wspierany przez moment.js, ale chodzi o to, że mógłbym go tutaj
nadpisać i teraz tworząc filter czy tutaj lokalnie czy globalny.
Moglibyśmy jeszcze przyjąć sobie parametr. Byłby to parametr format,
który tam przekazaliśmy. No i teraz wystarczy, że tutaj zrobię sobie takie
proste sprawdzenie. Jeżeli format jest podany to z niego skorzystaj. Jeżeli nie, skorzystaj z domyślnie
takiego jak jest w tym miejscu. Moglibyśmy w EcmaScript6 również skorzystać z
domyślnego parametru. Wstawilibyśmy go w to miejsce. Natomiast wystarczy,
że zrobimy coś takiego. Powinno to również działać. Spójrz jak to data wygląda
teraz. Odświeżam i data wygląda w następujący sposób. Tak
zatem można tworzyć filtry. Super istotna rzecz jest taka, że filtry można łączyć. Natomiast
tutaj już nie mam konkretnego przykładu. Na tej dacie urodzenia. Chodzi o to, że tutaj można
by było napisać na przykład filter 2 i to co zostało zwrócone
już z takiego użycia tego filtra, czyli taka konkretna wartość. Ona
została być zwrócona do kolejnego filtra i on mógłby coś z nią zrobić. Na przykład
moglibyśmy mieć filter zamieniając coś na wielkie litery. W przypadku tej daty
tutaj już nam się wydaje nic więcej nie przyda, nie mniej jednak można
filtry łączyć, pamiętaj o tym i jeszcze jedna istotna informacja na koniec. Filtry
za każdym razem są wyliczane od nowa, czyli computed properties pamiętasz,
że one nie były renderowane za każdym razem od nowa. Kiedy rerenderowaliśmy
widok, nie wszystko było wyliczone. W przypadku filtrów za każdym razem one będą
od nowa uruchamiane. To zatem tyle w temacie filtrów, a w kolejnej
lekcji przyjrzymy się temu jak można filtrować dane chociaż z takimi filtrami
tutaj jak widzisz nie będzie to miało już nic wspólnego.