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 poprzedniej lekcji zobaczyłeś w jaki sposób możemy niepoprawnie i poprawnie
korzystać z atrybutu ref. Natomiast nie poprawny sposób polegał na tym, że
próbowaliśmy się odwołać do pól formularza, ale one nie działały reaktywnie i dobra
wiadomość jest taka, że Vue oferuje nam dyrektywę v-model, która ten problem
rozwiązuje, bo ustawia dla nas tak zwany Two Way Data Binding, czyli
dwukierunkowe wiązanie danych pomiędzy polami formularza a naszymi
danymi, czyli tym co mamy w atrybucie data, więc teraz
mamy taki oto formularz i w naszej aplikacji zapisałem sobie właśnie w
data first name last name i age, te dane, które będą mi potrzebne dodatkowo
dodałem sobie computed properties, takie jak full name, które zwraca mi pełne
imię i nazwisko połączone tutaj na spacji oraz isFilled, która zwraca
mi czy tak naprawdę te wszystkie pola są wypełnione i czy
hage ma więcej niż 18. Wtedy będę tutaj miał true. Dzięki
temu mogłem sobie isFilled przypisać w tym miejscu, czyli przycisk ma być
wyłączony, jeżeli zanegujemy sobie ten wartość, innymi
słowy, jeżeli te dane nie są poprawne, jak widzisz, przycisk jest wyłączony. Kiedy je uzupełnimy
poprawnie, chciałbym żeby tutaj się pojawiały i żeby ten przycisk automatycznie
sam z siebie się odblokował. Jest to bardzo łatwe do zrobienia w Vue dzięki
właśnie tej computed property, którą mamy tutaj. Natomiast teraz musimy
jakoś te właściwości z obiektu data powiązać z polami, które są na
naszej stronie. Jest to dziecinnie proste, bo wystarczy, że dodamy do
takich pól atrybut v-model, czyli taką dyrektywę i napiszemy
first name. To musi korespondować z nazwą, która jest w tym miejscu, dlatego
dokładnie to samo będę chciał zrobić dla pozostałych pól
i mamy jeszcze pole wiek, czyli age i
to wystarczy po odświeżeniu, jeżeli zacznę cokolwiek wpisywać,
zauważ, że twoje dane Piotr, tutaj są już działają sposób reaktywny,
czyli full name się uzupełnia na podstawie computed property. Jeżeli
sobie tutaj będziemy uzupełniać dalej, też wszystko będzie działać poprawnie, no i
musimy sobie jeszcze wpisać wiek, jeżeli wpiszesz 17, przycisk się
nie odblokował, a przy 19 już nam się jak
widzisz odblokował, bo jest to wartość większa niż 18
i teraz mogę kliknąć na ten przycisk i wysłać dane i mam tutaj komunikat
wysyłam dane Piotr Palarz 19, więc w ten sposób to działa. Jest
to jak widzisz naprawdę proste, ale co ważne, możemy jeszcze do tych modeli dodać sobie pewne
modyfikatory. Pytanie brzmi co by było gdybyśmy tutaj wpisali
sobie puste znaki, puste znaki puste znaki i na przykład 20. Przycisk
się odblokował, bo te puste znaki tutaj są. Chciałbym na nich wykonać trim, żeby
właśnie usuwać zawsze białe znaki z początku i końca string'u i wtedy to
moje porównanie tutaj będzie miało sens, bo nie będą to
puste znaki, dlatego że dla JavaScriptu coś takiego jest wartością fałszywą, ale
to już nie stąd właśnie nam to nie zadziałało i ciekawy modyfikator,
który możesz tutaj zastosować, jest to modyfikator trim. Wystarczy
go dopisać w ten sposób, okej i zobaczmy. Teraz jeśli wpiszę
puste znaki i wyskoczę z tego pola, one zostały usunięte, więc nie jest
to brane pod uwagę. Kolejnym ciekawym modyfikatorem jest modyfikator number,
dlatego że w obiektowym modelu dokumentu nie ważne, że ja tutaj wpiszę 20, jeżeli value takiego pola
jest odczytywane. Jest to string 20 i możemy to sobie oczywiście
sprawdzić, na przykład tutaj w isFilled,
moglibyśmy zrobić console.log this age. Zobaczmy,
jeśli tutaj wpisze 20, to jest tutaj pokazane jako string. Gdybyśmy
zrobili type of, to byś to zobaczył. Natomiast czasami chcemy, żeby to był number. Po
to żebyśmy na przykład mogli robić różne liczbowe porównania. Mnożenie,
dzielenie i tak dalej. Przez string nam to nie będzie działać poprawnie, więc wystarczy do
takiego pola dodać modyfikator number i to oznacza, że to co jest wewnątrz musi
być przez Vue sparsowane z użyciem właśnie konstruktora number, w ten
sposób i tutaj string będzie przekazany, więc po odświeżeniu tej strony. Jeżeli tutaj teraz
wpiszę 20, to wartość, która jest przypisana tak naprawdę tutaj do
age jest to number o wartości, oczywiście, 20, typ number,
wartość 20. Okej, no i jeszcze jedna rzecz. Być może zauważyłeś,
że to wszystko działa po każdym znaku jaki wpisze, dlatego że v-model działa
na zdarzenie input, czyli jest takie zdarzenie on input albo
możesz napisać add event listener input, jeżeli byśmy nie korzystali z Vue i to
zdarzenie za każdym wciśniętym klawiszem tak naprawdę nam się odpala lub jeżeli
wkleiłbym tutaj jakiś tekst. Natomiast możemy dodać modyfikator do
tych pól. Ważne, że modyfikatory można łączyć, więc możemy tutaj zrobić trim i
następnie lazy, czyli leniwy, zobacz
jaka będzie różnica. Teraz jeżeli tutaj wpiszę Piotr, nie jest to reaktywne
wydawałoby się, bo nie jest tutaj zaktualizowane, ale jeśli wyskoczą z tego pola to
już jest. A więc modyfikator lazy tak naprawdę sprawia, że nie nasłuchuje
my na zdarzenie input, ale na zdarzenie change, a zdarzenie change odpala
się na polach, kiedy wyskoczymy takiego pola. Dopiero wtedy się odpala i pod warunkiem,
że wartość pola się zmieniła na inną, więc modyfikator lazy
pozwala ci w ten sposób pracować. Jeżeli będziesz chciał na przykład walidować
jakieś dane, dopiero kiedy takie pole zostanie opuszczone. Może wtedy chcesz użytkownikowi wyświetlić
informacje hej, wpisałeś coś niepoprawnie, a nie od razu, bo wyobraźmy sobie, że
na przykład wymagamy, aby wpisać wiadomość minimum 5 znaków, to jeżeli ktoś
pisze trzy, pojawi się komunikat, że nie wpisał pięciu znaków, a jeszcze
przecież nie zdążył, więc może dajmy mu szansę wyskoczyć z tego pola, wtedy dopiero to
sprawdźmy i wyświetlmy odpowiednią informację. Poza tym tyle
w tej lekcji. Jak widzisz v-model pozwala ci przepisać bez żadnego
problemu dwukierunkowe wiązanie, co ciekawe to będzie działać nie tylko na polach
input. Co jeszcze ci w kilku kolejnych lekcjach będę chciał pokazać, natomiast najpierw
chciałbym żebyś z rozumiał co tak naprawdę się dzieje kiedy korzystamy z v-model,
więc próbujemy sobie w lekcji kolejnej zaimplementować własny v-model.