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 poznasz kolejną dyrektywę, która jest niezwykle ważna w przypadku
budowania aplikacji internetowych, a będzie to v-for służąca
do tworzenia pętli, czyli v-if oraz v-show już poznałeś
i one bardzo się nam również przydadzą w tej lekcji, ale pokażę ci jak
działa v-for. Na początek w naszej aplikacji mam tablicę users
i tutaj są obiekty z użytkownikami, z ich danymi. Docelowo to mogłoby
być pobrane z użyciem Ajax'a z serwera i będziemy chcieli przeiterować po tej
tablicy i wyświetlić wiersz w tabeli dla każdego z tych użytkowników. Co
ja już zrobiłem, otóż mam tabelę i zrobiłem v-if, czyli ona ma być renderowana
wyłącznie jeżeli users length jest wartością prawdziwą, czyli jeżeli w
tej tablicy coś jest. Jeżeli byłaby ona pusta, no to wtedy ta
tabela się nie pojawi. Jeżeli będzie pusta, to będziemy tutaj mieli v-else,
brak danych do wyświetlenia, to nam się za moment przyda. No i tutaj mam już
taką strukturę tej tablicy, ale chciałbym wewnątrz tbody, tutaj
stworzyć sobie tr i w nim td z danymi,
czyli tutaj chciałbym mieć odpowiednie dane. Będziemy mieć 3 razy tutaj takie td i teraz
tutaj chciałbym wykonać właśnie pętle. Robimy to za pomocą dyrektywy
v-for i tutaj musimy napisać jak ma się nazywać docelowa
zmienna, więc user in users. No i to users, super
ważne, to jest coś co mamy w data lub na przykład computed, tak jak mieliśmy do
tej pory. Tutaj nic się nie zmienia, ale to jest dokładnie ta nazwa, czyli user
in users. Ważne jest również to, że możesz napisać user of users. Działa
to dokładnie tak samo. Natomiast of jest czymś nowym w
przypadku EcmaScript6. Tutaj nie ma to znaczenia. Natomiast jeżeli przywykłeś w ES6
do korzystania z pętli for of, możesz tutaj napisać of. Natomiast in zadziała
tak samo, czyli user in users i to nam pozwala na to, żeby
tutaj odwoływać się do zmiennej user, która będzie jednym
z elementów tej tablicy, a wiemy, że te elementy są to obiekty, więc teraz
mogę napisać user first name last name czy age. No i to będziemy chcieli
zrobić, więc będę chciał sobie tutaj wyświetlić user first name
postawimy spację
i zrobimy user last name. Natomiast chciałbym żeby
to było w drugim td, tutaj gdzie imię i nazwisko. Pierwsze sobie
za moment uzupełnimy. Tutaj chciałbym wstawić wiek, więc zrobimy user age
po prostu i na początek może to przetestujemy. Jak widzisz, to wszystko
działa poprawnie, natomiast chciałbym jeszcze liczbę porządkową tutaj dodać, więc pokażę
ci jak możesz przechwycić również indeks iteracji. To można opleść w
ten sposób i podać indeks jako drugi parametr. Nazwę to
zmienię do zmiennej dowolna, możesz ją nazwać i. Ja ją nazwę index i
dzięki temu ten indeks możemy tutaj wstawić, ale jak to bywa przy iteracji
tablic, będzie to zero na początku, więc chcę zrobić index plus 1
i może jeszcze za tym sobie dopiszemy kropeczkę i tak to będzie
wyglądać, więc wyświetliliśmy wszystkich użytkowników. Natomiast teraz rzecz, która
jest super ważna jest taka, że to wszystko jest oczywiście reaktywne, więc gdybyśmy
przeszli tutaj i mamy naszą tablice, zauważ, że jeżeli usunę
któryś element, jest to odzwierciedlane na stronie, więc znowu widzisz
jak Vue nam pomaga budować interaktywne aplikacje. Tutaj definiujemy co się ma
dziać, czyli w zasadzie, że na przykład te elementy mają być wyświetlane tyle
razy ile ich jest w tablicy i nic więcej tutaj nie musimy robić. Jeżeli w jakiś sposób
usuniemy element z tablicy, Vue o tym wie i później
od nowa to wyrenderuje i oczywiście co jest ciekawe Vue nie będzie renderowało
wszystkich tych tr, bo jest na tyle można powiedzieć inteligentne, że wie, który z
nich może usunąć i jak może te elementy używać. Natomiast
teraz pytanie brzmi, w jaki sposób moglibyśmy zaimplementować sobie
usuwanie takich elementów, otóż moglibyśmy przypisać zdarzenie kliknięcia tutaj
w pętli do tego elementu, czyli click i nazwali byśmy metodę remove
i przy jej wywołaniu moglibyśmy przekazywać tutaj na przykład indeks, czyli
skoro indeks mam pod zmienną, mogę go przekazać i teraz twórzmy sobie taką metodę. Ona
tutaj otrzyma oczywiście ten indeks, ten parametr tutaj może się nazywać dowolnie i
mając taki indeks będę mógł się do tej tablicy odwołać, this users
i być może pamiętasz jak ci pokazywałem, że Vue opakowuje pewne metody
tablic i stąd wie, że wykonaliśmy coś na takiej tablicy, bo jeżeli tylko nadpisywaliśmy,
wtedy się wykonuje setter, no i Vue o tym wie, natomiast opakuje
również, również niektóre z metod tablic i mamy taką metodę jak splice i ona
nam pozwala wyciąć jakiś element tablicy. Więc mogę powiedzieć, pod którym
indeksem ten element jest i ile elementów chcę wyciąć, więc wytnę
po prostu 1 i to modyfikuje tą tablice dlatego jeżeli usuniemy sobie jakiś
element to Vue musi od nowa to odzwierciedlić na stronie, więc
to nam powinno już w tym momencie działać, a więc ten indeks jest przekazywany w
tym miejscu. Sprawdźmy, jeżeli kilknę na Katarzyna Tomczyk, została
ona usunięta i zostało to odzwierciedlone na stronie. Natomiast to o czym
mówiłem, Vue wcale nie wyrenderuje tego wszystkiego od nowa. Wie, które elementy tr
może zachować, a z których może skorzystać również ponownie, więc jest
to super wydajne i teraz jeżeli tak będziemy klikać, to w pewnym momencie usuniemy
wszystkie elementy i zauważ, że będzie brak danych do wyświetlenia, bo ta tablica
będzie pusta i znowu jeżeli jest pusta to ten element ma się nie pokazywać. Ma
się pokazywać wyłącznie ten. Jak zatem widzisz, bajecznie proste jest tworzenie
interaktywnych aplikacji. Wyobraź sobie jak wiele musiałbyś napisać
kodu i jak on był zagmatwany, żeby coś takiego uzyskać, na przykład pisząc
w bibliotece jQuery, która i tak nam sporo rzeczy ułatwia, ale
nie jest niestety rozwiązaniem idealnym tego typu aplikacji,
więc tutaj Vue sprawdza się jak widzisz świetnie. Co ważne możemy
za pomocą v-for iterować również po obiektach, czyli jeżeli mamy taki obiekt, możemy
przeiterować i będziemy mogli wyłuskać sobie klucz, czyli wartość. Ja
będę chciał ci to pokazać teraz już tutaj wklejając fragment kodu, żebyśmy tego
nie musieli wszystkiego pisać, więc jeżeli będziesz potrzebował również
sobie z tym poradzisz. Zrobiłem tutaj nagłówek json i w takim
elemencie będę chciał to zrobić. Jeżeli mamy jakiś użytkowników to go wyświetlam i zauważ,
że tym razem v-for będę iterował po obiekcie, czyli value,
key oraz index. Nie musisz przyjmować wszystkich tych parametrów jeżeli nie chcesz. Możesz przyjąć tylko
jeden dwa lub maksymalnie trzy, ale musimy iterować nie w tablicy, ale
w obiekcie dlatego odwołałem się do users 0 żeby mieć taki oto obiekt
i tutaj pod value wpadnie mi wartości Jan,
pod key wpadnie mi first name, a pod index będę miał po prostu
1, 2, w zasadzie
tak 1, 2, czyli indeks tej iteracji. Zobaczmy jak to może wyglądać.
W ten sposób, first name last name i age, czyli
miałbym po prostu 1, 2 i 3 bo są trzy takie klucze. Nigdzie tego indeksu nie wyświetlam, więc
po prostu go tutaj nie widać, ale jak widzisz w ten sposób można również iterować po
obiektach, jeżeli jest to coś co będzie Ci kiedykolwiek potrzebne i jeszcze
ostatnia rzecz, która jest oferowana przez v-for. Jest
to generowanie takiego przedziału, czyli możemy iterować na przykład od
1 do 10, jeżeli chcielibyśmy zrobić coś takiego, więc teraz też
wkleję taki fragment tutaj, żeby ci
to pokazać. Możemy zrobić v-for n in 10, czyli będziemy mieli
po kolei pod zmienną n 1 2 3 4 i tak do dziesięciu zmianą
możesz nazwać inaczej. No i możesz ją wyświetlić w dowolnym miejscu. Natomiast
ja tutaj zrobiłem coś takiego jeszcze w v-if, bo jest to ważne, że
w v-if można połączyć z v-for i od tego warunku zależy czy ten element się pojawi
czy nie. Zrobiłem tutaj coś takiego żeby tylko parzyste liczby wyświetlać
i wyświetlam sobie tę liczbę. No i jeżeli nie jest to ostatnia już iteracja
to jeszcze chcę dodać przecinek. Zauważ, że takie wrażenie również można tutaj sobie
dodać. Na spokojnie sobie na to zerknij, ale jak widzisz stworzyłem po pierwsze
range od jeden do dziesięciu, a po drugie przy iteracji jeszcze if'em sprawdziłem
sobie warunek. Jeżeli jest prawdziwy, tylko wtedy dany wiersz można
powiedzieć tej iteracji się tutaj pojawia, więc tak by to wyglądało, a
więc zapamiętaj z tej lekcji że v-for pozwala nam iterować
po tablicach, gdzie możemy sobie przyjąć element tablicy i indeks
jeżeli jest nam potrzebny, po obiektach, gdzie mamy value, key oraz index
nazwy tych parametrów dowolne, ale kolejność wymagana i również
możemy tworzyć sobie range dowolna nazwa zmiennej. Następnie in oraz
wartość liczbowa i będziemy mogli sobie w ten sposób z tego korzystać. Na koniec
również zapamiętaj jedno z bardzo ważnych rzeczy. Jeżeli zmodyfikujemy
tablice, która była użyta przy before to będzie to odzwierciedlone na stronie.