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 pokażę ci kilka przydatnych dyrektyw, które pozwolą nam ukrywać lub
pokazywać jakieś elementy, a w zasadzie tylko i ukrywać, ale w ogóle wstawiać
do drzewa DOM lub nie. Bardzo ważna rzecz. Do tej pory
robiliśmy to z użyciem klas, pokazywałem ci na tym samym przykładzie, że możemy dodać kasę display
none, którą mamy tutaj zdefiniowaną i ukrywaliśmy jakiś element, ale można to
zrobić w zupełnie inny sposób. Za pomocą dyrektyw, więc mamy taki
sam przykład jak wcześniej i będę chciał po prostu ukryć tę wiadomość,
która jest z tym miejscu, a pokazać formularz a potem to zamienić
i możemy to zrobić na dwa sposoby. Pierwszy z nich jest dyrektywa v-if. Jeżeli
tutaj podamy wartość prawdziwą to ten element będzie wstawiony do drzewa DOM. Jeżeli
fałszywą, to jego tutaj nie będzie, więc będę chciał ten element pokazać.
Jeżeli jeszcze nie wysłaliśmy formularza, czyli not sent. Natomiast
odwrotną rzecz będę chciał zrobić tutaj v-if, pokazać go tylko
jeżeli sent i zobacz co tutaj się wydarzy. Jak widzisz,
ten element z message został ukryty, natomiast po dwóch sekundach tutaj
jeśli to wyślemy, to zostanie on pokazany. Natomiast czy na pewno on jest pokazywany
czy nie. No właśnie, jak wspomniałem, nie do końca. On nie jest tutaj nigdzie ukryty. Jego
w ogóle nie ma w drzewie DOM. Tutaj pozostał po nim tylko taki komentarz. Natomiast jeżeli
sytuacja się odwróci, formularz zostanie usunięty, a ten post zostanie
tutaj wstawiony, więc v-if, tak naprawdę kontroluje czy
jakiś element będzie w drzewie DOM czy nie. Tutaj sytuacja jest troszeczkę inna, bo
my pracujemy na żywym, tak naprawdę, obiektowym modelu, bo te templatki
i tworzymy tutaj bezpośrednio na naszej stronie. Natomiast jak się przekonasz jeszcze
w tym kursie, zazwyczaj nie będziemy tego robić w ten sposób, tylko szablony będziemy tworzyć w
zupełnie osobnych plikach lub mógłbyś je tworzyć w tagu script
co już ci pokazywałem. Czy podawać jako template po prostu
w string'u i wtedy tak naprawdę te elementy nigdy
się nie pojawiają w domu, bo tutaj jeżeli przeglądarka wczytuje tę stronę, ona do domu
doda taki formularz i doda ten element post. Natomiast później
Vue za pomocą v-if je usunie, tak żeby to wszystko odzwierciedlić,
ale jeżeli ta templatka byłaby w zewnętrznym pliku jako string, to poprzez
to v-if to nigdy nie trafi tutaj do tego dokumentu. Drugą dyrektywą,
którą chciałbym ci pokazać jest v-show i wydawałoby się, że ona
będzie działać tak samo i rzeczywiście
wizualnie będzie działać tak samo. Natomiast różnica jest taka, że ona kontroluje czy element
jest pokazany czy nie, a więc on w drzewie DOM pozostaje. Jak widzisz i formularz
i ten div tutaj jest i cały czas był, natomiast jest to kontrolowane
za pomocą display none, a więc on nie jest usuwany z drzewa DOM, czyli jeżeli coś
by się tym elemencie zmienił i zmienimy teraz wartość sent, żeby
go pokazać, to on będzie miał taką zmienioną formę. Natomiast, jeżeli będziemy
mieli v-if to wtedy ten element będzie od nowa jakby wstawiony i renderowany
i rzeczy, które tam ewentualnie mogły być wpisane na przykład jakimś polu input nie
będą odzwierciedlone, bo po prostu to wszystko będzie utworzone od nowa. No
i teraz jeszcze różnica jest taka. Zakładając, że taka templatka nie będzie tutaj od
początku w drzewie DOM tylko tak jak ci mówiłem w zewnętrznej templatce to różnica
jest taka, że v-if ma początkowo mniejszy koszt
dlatego, że stawiamy tutaj mniej elementów. Na samym początku byłby
to tylko formularz, nie mielibyśmy tego div'a, a w przypadku v-show od razu
są renderowane dwa elementy. Natomiast potem przy pokazywaniu, ukrywaniu
tych elementów, v-show jest bardziej wydajne, bo tylko zmieniamy display none, a v-if
kosztuje nas można powiedzieć więcej z tego powodu, że te elementy muszą być rerenderowane
i wstawiane lub usuwane, więc to już zależy od ciebie. Natomiast zazwyczaj
korzysta się z v-if, jeżeli po prostu mamy więcej elementów, więcej
sekcji jakby naszej aplikacji i chcemy kontrolować, która z nich jest pokazywana
lub ukrywana. Na koniec ci pokażę jeszcze jedną ciekawą dyrektywę,
otóż jeżeli warunek ma być po prostu odwrócony, czyli tutaj mamy jeden
warunek, a tutaj przeciwny, to można do tego elementu dodać taką dyrektywę
v-else, okej i zobaczmy tutaj
Vue nam ostrzeżenie, ale to z tego powodu, że v-else nie zadziała
nam na dyrektywie v-show, ale ona działa
na dyrektywie v-if, czyli jeżeli korzystasz z v-if, możesz korzystać z
v-else i zauważ, że to działa to dokładnie tak jak wcześniej, czyli
po prostu ten warunek jest odwrócony, ale super ważne, że v-else zadziała tylko
na kolejnym elemencie, czy jeżeli v-form był tutaj i na nim było
if to tylko następujący po nim element może mieć v-else.
No i co ciekawe, również możemy zrobić v-else-if, tu mógłbyś podać
inny warunek i on oczywiście odnosił by się najpierw do tego, czyli ten
jest sprawdzony. Jeżeli nieprawdziwy, sprawdzamy kolejny, czyli tak samo jak w
języku JavaScript. Natomiast ja to zostawię w takiej formie, czyli po prostu v-else, wiesz już
zatem jak możesz pokazywać lub ukrywać elementy i gdybyś chciał, aby
stan takiego elementu został zachowany, to wtedy korzystaj z v-show, ale
ograniczenie jest takie, że nie działa wtedy v-else tylko musimy tutaj wpisać v-show
i warunek na przykład odwrócony.