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 stworzymy sobie swoją pierwszą aplikację i będzie to Hello World. Oczywiście
tego nie może zabraknąć w żadnym kursie, gdzie omawiamy jakiś język programowania czy
nowe narzędzie i będzie to oczywiście z użyciem Vue, więc
zobacz mam taką prostą stronę na której na razie nie ma nic dynamicznego mamy
aplikację, czyli w zasadzie jest to div z identyfikatorem app, który moment
tam się przyda i dwa teksty wstawione na sztywno i teraz będziemy
chcieli te teksty móc podmienić dynamicznie z użyciem Vue. Vue jest
dołączone do strony, więc tak jak ci w lekcji poprzedniej pokazałem, tutaj będzie można z niego
korzystać. Nic nie stoi na przeszkodzie, żeby ten kod, który tutaj wpiszę podłączyć
w osobnym pliku JavaScript'owym, ale na razie będzie go na tyle mało, że możemy go wpisywać
tutaj ręcznie czy w zasadzie bezpośrednio w tym pliku html'owym
i teraz z Vue korzysta się na jeden
z kilku sposobów, ale na początek kiedy jeszcze nie będziemy mówić o
komponentach i o tego typu rzeczach to będziemy tworzyć nową instancję, czyli
mamy globalny taki konstruktor Vue i możemy stworzyć
za jego pomocą nową instancję, czyli w języku JavaScript możemy
tak tworzyć nowe obiekty, a Vue możemy postrzegać jak swego rodzaju klasę i oczywiście
możemy to przechwycić i zapisać w jakiejś zmiennej. Często zapisujemy to w zmiennej vm jak Vue
model. Do tego wrócimy jeszcze później. Aczkolwiek w tym przykładzie
nie będzie to konieczne. Po prostu tworzymy new Vue i super
ważna rzecz, przekazujemy tutaj obiekt konfiguracyjny. Nie musi on być w
tej przekazane jak to bywa w javascripcie bezpośrednio możesz go mieć jakieś
zmiennej i tutaj przekazać jej nazwę. Natomiast wpiszemy go tutaj bezpośrednio i
pierwszą z rzeczy, która będzie dla nas ważne jest to, aby powiedzieć Vue,
którą część stronę ma kontrolować i ważne jest to że
Vue może być dodany do strony i może kontrolować tylko wybraną jej
sekcję, dlatego chciałbym żeby Vue kontrolowało to co znajduje się tutaj wewnątrz
tego div'a app. Stąd tutaj możemy napisać el jak element i pobrać
selektor CSS, który będzie właśnie odpowiadał elementowi
na stronie, a więc hash app to jest po identyfikatorze ten element i
to oznacza, że ten element i wszystko co jest wewnątrz będzie kontrolowane przez
Vue pytanie brzmi co się stanie kiedy odświeżymy. Zupełnie
nic, bo teraz musimy jeszcze dodać sobie kilka rzeczy,
żeby to wszystko mogło działać poprawnie. Po pierwsze i co jest również
szczególnie ważne, dodać obiekt o nazwie data. Jak
widzisz jest to zwyczajny obiekt, ale w niej wpisujemy wszystkie dane, które chcemy, aby
mogły być wykorzystywane wewnątrz szablonu, a szablonem
będzie teraz tutaj wszystko, co znajduje się wewnątrz tego elementu. Jeśli
zatem Hello World będę chciał za moment podmienić na message, to
mogę tutaj napisać message lub może lepiej tutaj będzie napisać heading i
wpiszemy sobie Hello World. A to co jest poniżej to będzie
powiedzmy text. Wpiszemy sobie to co jest w tym miejscu. Będę
chciał żeby Vue wstawiło to za dynamicznie w te miejsca i teraz
kiedy Vue kontroluje jakiś element, jakąś wybraną sekcje naszej
strony, to okazuje się, że jej elementy html mogą być
w ciekawy sposób używane. Po pierwsze będzie mieli różne dyrektywy
dodawane w postaci atrybutów, o tym powiemy później, ale
dodatkowo wewnątrz takiego elementu, czyli w jego treści będziemy mogli korzystać z takiego
oto zapisu. Jest to system templating'u dla Vue, troszeczkę
podobny na przykład do Moustashe lub do Handlebars.js. Natomiast działa
on nieco inaczej, ale w ten sposób możemy wyświetlić jakieś dane i mogę
tutaj wpisać heading, a pod spodem możemy zrobić to samo i wpisać
tutaj tekst i to co jest ważne. No to już się pewnie domyślasz, że
heading i tekst to są właściwości obiektu data, czyli ten obiekt zawsze się tak nazywa,
ale to co jest wewnątrz, zależy już od nas i to powinno zostać tutaj podstawione,
więc jeżeli przejdę i odświeżę. Zauważ, że nic się na naszej stronie
nie zmieniło. Dokładnie tak też jest. To działa bardzo szybko,
bo pliki chociaż wczytaliśmy je tutaj z zewnątrz, to są wczytywane w
pamięci podręcznej, ale gdybyśmy w network przeszli i zaznaczyli disable
cashe, to wtedy one są pobierane z internetu i widzisz kiedy
ja odświeżam, że przez chwilkę widać ten oryginalny tekst
czyIi właśnie to, co widzimy tutaj. Przeglądarka to renderuje,
a dopiero kiedy wczyta Vue. Kiedy Vue to podmieni to to się zmienia, więc to po prostu tutaj
widać i żeby to obejść to od razu pokaże ci pierwszą dyrektyw
dostępną w Vue Wszystkie dyrektywy Vue są to
atrybuty, które są poprzedzone takim przedrostkiem v pauza i jedną
z takich dyrektyw jest cloak v-cloak
i nie ma żadnej wartości, jest tylko taki atrybut. Sam sobie ten atrybut tutaj
nic nie robi, ale okazuje się, że Vue kiedy się wczyta to
usuwa ten atrybut, czyli zobacz, aplikacja już nie ma tego atrybutu i dzięki
temu możemy w CSS do wszystkich elementów, które
mają takie atrybut v-cloak. Przypisać na przykład
display none lub visibility hidden, to zależy od ciebie. Dzięki temu
kiedy przeglądarka wczytuje ten kot zobacz taki atrybut to po prostu ukryje
ten element, a kiedy Vue się wczyta usunie ten atrybut i element zostanie pokazany
i zobacz teraz kiedy odświeżam, nie widzimy już tych oryginalnych
wartości, które są tutaj i dzięki temu wygląda to nieco lepiej. Natomiast ja wrócę
do zaznaczenia tutaj czy oznaczenia disable cashe, żeby
te pliki były wczytywane. Jak widzimy tutaj z pamięci podręcznej, co
ważne, w obiekcie data możemy również wstawiać zagnieżdżone
jakieś wartości. Tutaj mogą być tablice, tutaj mogą być obiekty, tekst to
mógł być obiekt, w którym będą kolejne właściwości i wtedy tutaj po kropce byśmy się do
nich odwoływali. Więc jak najbardziej jest to możliwe. Natomiast teraz jeszcze chcę ci
pokazać, że jeżeli byśmy przeszli do tego naszego panelu Vue, czyli Vue devtools, które zainstalowaliśmy, to
okaże się, że po kliknięciu na root mamy dostęp do tych
wartości i możemy je zmienić i to co jest esencją Vue, to to,
że jeżeli zmienią się dane, które są tutaj w obiekcie data, to zostanie
to odzwierciedlone w drzewie DOM, czyli na stronie. No i Vue jest bardzo wydajne,
bo potrafi ocenić, że na przykład zmieniliśmy tylko dane w heading
i wtedy zmieni tekst wyłącznie w tym elemencie. Natomiast nie będzie
zmieniać elementu p. Natomiast niektóre frameworki, szczególnie
dawniej, renderowały wszystko od nowa. Tutaj przy okazji zauważyłem, że to powinno
być zamykające h1. W jaki sposób zatem Vue wie,
które elementy ma zmienić. Otóż korzysta z czegoś co nazywa się Virtual
DOM i omówimy to w kolejnej lekcji. Natomiast chce ci pokazać, że jeżeli coś tutaj zmienimy
i możemy to zrobić w tym narzędzia Hello World i trzy wykrzykniki. Wciskam Enter,
od razu jest na stronie odzwierciedlane. Natomiast oczywiście nie będziemy
tego zmieniać i później tylko za pomocą różnych metod, ale o tym w kolejnych
lekcjach. Co jednak jest ważne, to tutaj mamy zmienną dolar
vm0 i możemy z niej skorzystać w konsoli vm0
i to nam zwróci instancję Vue, czyli to jest dokładnie to samo, jakbym
tutaj sobie przechwycił, napisał vm, to w przeglądarce
również mógłbym napisać vm kropka i coś wykonać. Natomiast jeżeli tego
nie zrobię to to narzędzie za mnie tworzy taką zmienną i co
ważne, mogę się odwoływać bezpośrednio do właściwości, które dodaliśmy na data, czyli
nie muszę tutaj pisać w żaden sposób data i następnie na przykład tekst, ale
od razu mogę zmienić tekst, na przykład na Witaj Świecie,
wciskam enter i zobacz na
stronie zostało to od razu zmienione. Czyli to co jest ważne i
o tym jeszcze będzie mówić w jednej z kolejnych lekcji, to wszystko to co my dodamy
w data za pomocą Vue jest proksowane do głównej instancji,
czyli instancja, która tu jest zwracana zawiera na sobie bezpośrednio
to co oddaliśmy tutaj, czyli Vue, można powiedzieć, że iteruje przez ten obiekt data i
jeżeli tutaj widzisz heading to do this heading dodaję sobie coś, ale
co to jest to powiemy o tym później i dzięki temu bezpośrednio możemy się w ten
sposób na tych instancjach odwoływać. Natomiast później w metodach, które ci pokażę w jednej
z kolejnej lekcji, będziemy mogli napisać na przykład this.heading i zmieniać te
wartości. Okej, zatem to jest nasz prosty przykład, takiej
aplikacji Hello World, dowiedziałeś się w jaki sposób możemy podmieniać
tekst. W jaki sposób dodajemy dane i bardzo ważne, jest to obiekt obiekt
data, bo to jest tak zwany Single Source of Truth, czyli zawsze coś
będziemy zmieniać tutaj, a zadaniem Vue będzie odzwierciedlenie to tego
na stronie i również dowiedziałeś się już co nieco na temat dyrektyw. Dyrektywy są
to atrybuty, które czasami mają wartości i zawsze są poprzedzone
przedrostkiem v pauza, w tym przypadku v-cloak sprawia,
że możemy ukryć taką aplikację, taki fragment naszej strony
do momentu aż Vue zostanie wczytane. Zatem to tyle w tej lekcji,
w kolejnej lekcji odpowiemy sobie na pytanie jak tak naprawdę działa wirtualny
DOM.