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 i w kilku kolejnych lekcjach porozmawiamy sobie o tym, w jaki sposób
możemy animować pokazywanie i ukrywanie elementów lub przejścia
pomiędzy poszczególnymi komponentami. Świetna rzecz, dostępna w Vue i będę
chciał ci teraz pokazać na czym sprawa polega. Przypominam ci przykład, który
mieliśmy wcześniej, mamy taką tabelę i jeżeli klikamy to elementy są usuwane i
w momencie kiedy usuniemy wszystkie, pojawia się taki oto komunikat i działa to
na zasadzie v-if, czyli jeżeli w tablicy już nic nie ma, to ten element jest
ukrywany, a ten element jest pokazywany. Chciałbym teraz zrobić tak, żeby one
były pokazywane i ukrywane za pomocą animacji i okazuje się, że jest
to bardzo proste, ale tutaj trzeba zrozumieć w jaki sposób to działa. Jeżeli
to zrozumiesz będziesz mógł stworzyć dowolnie złożone animacje. Po pierwsze
elementy muszą korzystać z v-if, a nie z v-show, tak
jak w tym przypadku, czyli mamy tutaj taki warunek, że będzie albo ten element albo
ten, czyli zawsze będzie jeden element i to jest bardzo ważne i oplatamy
te elementy takim elementem, który się nazywa transition, te
dwa elementy sobie w tym ujmiemy, czyli te, które chcemy animować, okej
i zasadzie tyle wystarczy, można byłoby pomyśleć, żeby
to zaczęło działać, aczkolwiek nic się tutaj ciekawego nie wydarzy. Niemniej
jednak jeżeli byśmy sobie przeszli tutaj i kliknęli na tą tabelę, to Chrome Dev
Tools możesz wybrać Break On i na przykład attribute
modification, czyli jeżeli dowolny atrybut tutaj, na przykład, klasa będzie modyfikowany
to nam się to w debuggerze zatrzyma, więc spróbujmy sobie usunąć wszystkie
elementy i debugger nam się zatrzymał. Okazuje się, że Vue
próbowało tam dodać jakąś klasę, w tym momencie nie widzimy jaka jest to klasa, natomiast
widzimy, że Vue jakąś klasę próbowało w tabeli dodać zanim ją ukryło. Dzieje
się tak właśnie dlatego, że skorzystaliśmy z transition, więc teraz tutaj warto kliknąć
jeszcze raz i odznaczyć attribute modification. Natomiast zapamiętaj,
że jakaś klasa jest tam dodawana. Teraz pytanie jaka? Przejdziemy na stronę dokumentacji,
właśnie tutaj do transition i pokażę ci bardzo
ciekawy diagram do którego ja zawsze wracam kiedy robię coś z animacjami, bo
on nam tutaj pokazuje na czym rzecz polega. W momencie kiedy brakło nam elementów
i ten element miało być ukryty z użyciem v-if, miał być po prostu usunięty
ze strony, rozpoczyna się taki proces. Vue będzie chciało do elementu
dodać klasę v-enter, v-enter-to i dodatkowo
v-enter-active. Przede wszystkim tę kasę i właśnie dlatego w
tym debuggerze nam się to zatrzymał, bo Vue próbowało dodać tam takie klasy, z
tym że po tych klas trzeba przypisać jakieś style, transition albo
key frames w css3 i znowu Vue jest na tyle tutaj inteligentnym framework'iem,
że potrafi z tych styli wyczytać ile trwa animacja i dopiero kiedy
ona się zakończy, on ten element nam rzeczywiście usunie z drzewa DOM. Natomiast
jeżeli byśmy chcieli i zazwyczaj będziemy to robić, zmodyfikować ten przedrostek v, żeby
podać swoją nazwę. Ja to będę chciał od razu zrobić, to na takim transition wpiszemy sobie
name i ja napiszę fade. Wtedy dodawane klasy to
będzie fade enter, fade enter to oraz fade enter active i
co jest ważne te klasy tutaj są kiedy ten element jest pokazywany. W
naszym przypadku on był ukrywany, więc Vue będzie te klasy stosować
do tego elementu. Dokładnie to samo będzie w tym przypadku, jeżeli zmieniłem
sobie name na fade, to będzie fade leave, fade leave to i fade leave active.
No i teraz żebyśmy zrozumieli o co chodzi, musimy sobie dodać style. Jeżeli
przedrostek nazwałem fade, gdybym tego nie zrobił, wpisałbym Vue, czyli
V, napiszemy sobie tutaj fade i następnie
dodajmy klasę może leave. W zasadzie
to leave to, bo kiedy ten element jest ukrywany, to będziemy animować do takiej
właśnie klasy. Będę chciał przypisać opacity
0, ale to nie wszystko, bo muszę jeszcze przepisać transition
i zrobimy to tutaj patrząc jaka klasa jest dodawana kiedy ten element
jest ukrywany, jest to leave active, czyli u nas to będzie fade leave active
do każdego elementu, który ma taką klasę chce przepisać transition
i chcę animować opacity. Chcę
żeby to trwało pół sekundy i żeby miał is in out
i właśnie Vue potrafi sobie zczytać jaki to jest czas
i te klasy będzie odpowiednio dodawało oraz
kiedy ten czas minie czyli animacja się zakończy to Vue dopiero wtedy usunie element. Sprawdzimy
jak to wygląda w praktyce, żeby mieć lepszy ogląd co tutaj się dzieje, kilkam żeby usunąć wszystkie
elementy, ok i wydaje się, że coś poszło nie tak, bo
nie zobaczyliśmy żadnej animacji. Nie mamy tutaj również błędu, więc
zerknę sobie jeszcze raz do kodu no i widzę, że tutaj jest literówka. Tutaj
powinno być jeszcze i, ja może zmienię to na dwie sekundy, żeby to rzeczywiście było jeszcze lepiej
widoczne, bo teraz w ogóle nie zadziałało, ale sprawdźmy, okej i
widzimy, że ta klasa rzeczywiście była dodana, to się zanimowało
z użyciem CSS, czyli jest bardzo wydajne. Dopiero kiedy animacja się zakończyła.
Zobaczmy to raz jeszcze, to wtedy dopiero ten element został ukryty. Natomiast
ten został pokazany jest zbyt wcześnie, ale tym się będziemy chcieli również
zająć i można to zrobić w ten sposób że do transition dodajemy sobie mode
i nazwiemy go tutaj out in. To oznacza, że dopiero
kiedy element się usunie, kiedy zniknie, dopiero
drugi może być pokazany, więc sprawdzimy teraz jak to będzie wyglądać. Całą sekundę
te opacity się animuje i ten element dopiero wtedy się pojawia. Natomiast
ten element również otrzymał wszystkie stosowne klasy, ale my ich jeszcze nie przypisaliśmy,
bo przypisaliśmy dopiero klasy do ukrywania elementu, a do pokazywania są
te klasy tutaj. Dlatego w zasadzie tutaj będziemy mogli sobie to zdublować,
czyli w fade enter active, to
będzie to samo i tutaj fade enter będzie
to też opacity zero, z astanówmy się nad tym żebyś to dobrze zrozumiał, czyli momencie kiedy
Vue będzie chciał pokazać jakiś element, przypisze mu v-enter. W naszym przypadku
fade enter, bo taki przedrostek wybrałem i wtedy chcę, żeby element miał opacity
0, żeby nie był po prostu widoczny. Dodatkowo w tym samym momencie
zostanie przypisana klasa fade enter active, która sprawi,
że opacity będzie animowane na przestrzeni dwóch sekund. Moglibyśmy
jeszcze dodać tutaj klasę fade enter to i ustawić wartość opacity na 1,
ale jeżeli tego nie zrobię to domyślnie też to zadziała, bo ten element na początku już
ma opacity 1, on po prostu jest widoczny, więc to powinno nam
zadziałać, możemy to sprawdzić. Usuwam wszystkie elementy
i przez dwie sekundy to będzie znikać i po tym czasie ten element się pojawia
i wygląda to w taki oto sposób. Jeżeli to zmienimy tutaj, zauważ,
że nigdzie w JavaScripcie tego nie musimy robić, wystarczy tutaj. Vue sobie jest w stanie to
sparsować, to w fajny sposób zanimujemy
pokazywanie i ukrywanie tych elementów. Natomiast jeszcze jedna fajna rzecz, po odświeżeniu strony
chciałbym, żeby od razu tutaj się pojawiła taka animacja i możemy to zrobić bardzo
łatwo dodając tutaj atrybuty appear. Wystarczy coś takiego dopisać
i animacja będzie również na samym początku. Jak widzisz w ten
sposób to wygląda i co my zrobimy w tych animacjach, to już zależy od nas i będę
chciał ci pokazać jeszcze kilka przykładów w kolejnych lekcjach.