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 w jaki sposób możemy pracować z dynamicznymi atrybutami
właśnie w html. Do tej pory już widziałeś, że w tej templatatce Vue,
czyli w zasadzie w naszym kodzie html, w tym fragmencie, który jest kontrolowany
przez Vue.js możemy korzystać z różnych atrybutów i są to tak zwane dyrektywy. Na
przykład v-text wstawi w formie tekstowej tutaj to, co
mamy full name. Okazuje się, że to jest akurat computed property i bez
problemu nam to zadziała tutaj po odświeżeniu. Pokazałem ci również, że wewnątrz takich
atrybutów możemy korzystać z wyrażeń JavaScript'owych, więc gdybym tutaj dodał dwójkę
zostanie to w taki oto sposób połączone, więc to już wiesz, ale
teraz pytanie co by było gdybyś chciał dynamicznie przypisać na przykład adres
URL. Powiedzmy, że mamy tutaj tego pana Jana Kowalskiego i że
on ma jakąś swoją stronę internetową i chciałbym tutaj do niej przypisać link,
moglibyśmy to wydawałoby się zrobić tak, URL
i tutaj byśmy też sobie wyświetlili ten adres, okej.
No i on musi być gdzieś dostępny. Wiem, że na razie to wszystko jest takie statyczne
i może nie widzisz do końca sensu po co mielibyśmy tutaj coś na sztywno wpisywać,
ale zapewniam cię że kiedy na przykład pobierzemy dane json'owe i w pętli je
będziemy wyświetlać to wtedy będziemy z nich mogli takie rzeczy wyciągać i podstawie
jego atrybuty, więc to naprawdę się przyda. Natomiast na razie wpiszemy to w sposób statyczny, byłoby to
Jan Kowalski pl. Powiedzmy coś
w tym stylu, no i sprawdzimy jak nam się to zachowa na naszej stronie. Widzimy,
że tekst się wyrenderował, rzeczywiście. Sprawdźmy jaki
jest atrybut, nic się tutaj nie podmieniło i Vue, co
jest świetne, dał nam ostrzeżenie. Tutaj jest napisane, że interpolation inside attribute has
been removed. Czyli widzimy, że kiedyś i to jest prawda, w Vue js
można było interpolować wartości atrybutów, ale to zostało usunięte i teraz
żeby przepisać coś dynamicznie do atrybutu, musimy to zrobić za pomocą v-bind,
czyli specjalnej dyrektywy i teraz będę chciał ci pokazać jak z niej skorzystać. Nie
będziemy w ogóle mieli wtedy tego prawdziwego atrybutu html, bo
co jest jeszcze niesłychanie ważne. Później w kursie będziemy pracować na templatkach, które
będą prekompilowane zanim w ogóle trafią do przeglądarki, natomiast to tutaj
jest to żywy kod HTML, bo przeglądarka kiedy wczytuje tą stronę, zanim
w ogóle dojdzie do tego skryptu Vue, dla niej to jest normalny kod html, więc
wszystko co jest tutaj musi być w jaki sposób kompatybilne ze specyfikacją
html. No i to co tutaj jest na razie rzeczywiście jest kompatybilne, bo możemy
sobie dowolnie nazywać atrybuty, nie ma problemu i tak dalej, więc Vue jeżeli sobie
później wyszuka tych elementów, może te atrybuty sczytać. Z tą kompatybilnością
będą pewne problemy, ale o tym powiemy sobie później w tym kursie. Natomiast
jeżeli usuniemy atrybut href i skorzystamy
z v-bind, to możemy po dwukropku napisać
href, czyli nazwę docelowego atrybutu i dopiero
tutaj podać wartość, którą tutaj chcemy mieć bez tych nawiasów
interpolacyjnych, tylko po prostu w ten sposób. Ważne, że tutaj też może
być wrażenie, czyli do tego co będzie w URL mogę jeszcze dopisać dwójkę. Mogę
tutaj wywołać metodę, mogę tutaj podać computed property, ale ważne jest, żeby
to było v-bind kropka dwukropek href. Okej,
zobaczmy, czyli przeglądarka jeszcze wracając do tej kompatybilności kiedy wczytuje tą stronę,
nie będzie miała atrybutu href, ale będzie taki oto atrybut i okazuje się, że atrybuty
na przykład z dwukropkiem są poprawne i przeglądarka po prostu taki
element wyświetli, ten atrybut przeglądarka zignoruje ona go doda do
drzewa DOM, ale go zignoruje i Vue.js może znaleźć taki atrybut, odetnie
sobie powiedzmy tę część, sczyta to co jest tutaj i będzie wiedział o
jaki atrybut docelowy nam chodzi, więc teraz jeżeli odświeżymy, nie ma błędu i jeżeli
tutaj przejdziemy to widzimy, że href został poprawnie dodany, więc zadziałało
to jak najbardziej poprawnie. Mógłbyś natomiast się zastanawiać, to
też tak w formie ciekawostki. Jak Vue sobie pobiera na przykład wszystkie takie
atrybuty. Można to zrobić na jeden z wielu sposobów, ale powiedzmy, że tutaj byśmy
taki atrybut dali, czyli do miejsca, gdzie niektóre nie jest kontrolowany przez Vue,
na przykład Vue bind coś,
równa się coś innego, bo
chcę ci tylko pokazać, że tak długo, jak te nazwy tutaj są kompatybiln,e
a twórcy Vue zadbali o to, żeby to działało w przeglądarkach, tak długo później ten
framework może się do nich odwołać, czyli tutaj jeżeli dodaliśmy coś takiego, to
po zaznaczoniu tego elementu taki trik w konsoli przeglądarki to jest niezależne
od Vue. Pod dolar zero mamy ten element pod który kliknęliśmy i można
się odwołać do takiego obiektu tablicopodobnego, który się nazywa attributes. To
jest dostępne w przeglądarkach i to nam wraca taką mapę gdzie mamy wszystkie te atrybuty,
więc powiedzmy, że gdybyś ty pisał Vue, mógłbyś na elemencie się odwołać do attributes,
przeliterować po tej pseudotablicy, pseudoobiekcie i zobaczyć,
że tam jest coś takiego jak v-bind, odciąć sobie pewną
część i mamy docelową nazwę atrybutu, to tak w formie tylko ciekawostki
i żebyś pamiętał, że to wszystko musi być jeżeli te
templatki są w przeglądarce renderowane, kompatybilne ze specyfikacją html i tak
też jest w tym momencie. Okej, no i oczywiście wszystkie rzeczy możesz
sobie tutaj w taki sposób zapisywać. Moglibyśmy mieć obrazek, który
miałby tag img i src, zapisałby
za pomocą v-bind src i tutaj łapie wartość tego
oto obrazka. Też by to zadziałało jak najbardziej poprawnie, ale co ciekawe jest to
pewnie skrót i żebyś ty pamiętał o pełnej wersji o skrócie, to ja w tym kursie wielokrotnie
jeszcze będę o tym mówił. Zamiast pisać v-bind href, wystarczy, że napiszemy
samo dwukropek href, oczywiście samo href będzie natywne
w przeglądarce i to nam nie zadziała. Natomiast dwukropek href jest też poprawną
w htmlu nazwą atrybutu, czyli przeglądarka go doda,
nie usunie go, kiedy się wczyta Vue będzie mogła taki atrybut znaleźć i go podmienić,
czyli v-bind dwukropek href albo samo dwukropek href. Działa
to dokładnie tak samo, jak widzisz i dowolny atrybut w ten sposób
można będzie dodać do wspomnianego obrazka byłoby to dwukropek src. Pamiętaj,
że tutaj można dowolne wyrażenia JavaScript'owe również wpisywać. Mówiłem
ci tylko, że w takich wyrażeniach nie można korzystać na przykład z if, ale pamiętaj, że taki
ternarny operator działa, czyli tutaj na przykład można by było powiedzieć, że jeżeli
coś jeżeli jest URL to tutaj wyświetl
coś, jeżeli go nie ma to coś innego. Wiem, że w tym przypadku nie
ma to sensu, ale chodzi mi o to, że tutaj if'y w jaki sposób wyrażenia zrobić
można. No i wtedy tutaj docelowo pojawi się coś bo URL
tutaj istniał. Natomiast, żeby tego nie psuć
zostawmy to w takiej formie i mamy z zbindowany
atrybut href. Oczywiście więcej atrybutów tutaj można dodać ten sposób
v-bind dwukropek nazwa lub dwukropek nazwa i tutaj wartość. Poza
tym tyle w tej lekcji i jak widzisz już ten cały system tego
templating'u zaczyna nabierać więcej sensu, mamy interpolacje, mamy
dyrektywy, które pozwalają nam dynamicznie przepisywać atrybuty, później
zobaczysz, że mamy jeszcze instrukcję warunkową wyświetlająca treść oraz instrukcje
tworzące nam pętle.