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 pokażę ci w jaki sposób pracować w Vue.js z event'ami
i mam tutaj na razie na myśli eventy takie natywne, czyli
na przykład kliknięcie na jakiś element czy powiedzmy wysłanie formularza kiedy
wiemy, że odpala się natywnie event submit. Natomiast później porozmawiamy jeszcze
o eventach w takiej innej koncepcji, mianowicie przesyłania danych
pomiędzy różnymi komponentami, ale o tym będzie później w tym kursie na razie skupmy
się na tym jak na przykład można sprawić, aby po kliknięciu w ten przycisk coś
się na naszej stronie wydarzyło. No i jak to bywa w Vue, nie
będziemy się musieli bawić z natywnym przepisywaniem elementów
czy zdarzeń do elementów. Do tej pory widziałeś, że wszystko w naszej templatce
oznaczaliśmy i później mieliśmy po prostu instancję, która to wszystko
kontrolowała. Tutaj będzie podobnie. Nie będziemy wyszukiwać gdzieś na stronie tego przycisku
aby przypisać do niego zdarzenie kliknięcia, na przykład za pomocą add event
listener. Po prostu zdefiniujemy to w taki deklaratywny sposób prosto w naszej
templatce, więc zobaczmy co mamy w tej aplikacji. Bardzo prosta ona
jest, jak widzisz, tutaj mamy licznik i wyświetlam właściwości counter i mam
przycisk, na który będę chciał kliknąć. Counter na początku ma wartość 0 i chciałbym
po kliknięciu w przycisk zwiększać tę wartość o 1, no i tutaj oczywiście, jeżelibyśmy
przeszli do tych narzędzi deweloperskich, zauażyłeś, że jeżeli zwiększam tę
wartość oczywiście, to na stronie jest odzwierciedlone i teraz
przejdziemy do tego jak przypisać zdarzenie kliknięcia. Od razu ci powiem, że robimy to za pomocą dyrektywy,
a więc bezpośrednio na elemencie, na którym chcemy takie kliknięcie zarejestrować. Dyrektywa
ta jak wszystkie inne związane z Vue ma na początku v
i będzie to v-on. Następnie dwukropek i tutaj po dwukropku
podajemy jaki jest to rodzaj zdarzenia. W naszym przypadku plik, ale
pamiętaj, że tutaj możesz przypisać dowolne inne zdarzenie jakie tylko znasz. Na przykład mouse
enter i tak dalej. Vue tutaj cię nie ogranicza. Przypiszmy zatem
zdarzenie kliknięcia i pytanie co podajemy tutaj. Podobnie jak
w innych dyrektywach, tutaj można podać jakieś wyrażenie. No
więc możemy tutaj bezpośrednio wykonać jakiś kod JavaScript i z tego powodu możemy
się odwołać na przykład do counter plus plus, tutaj oczywiście to
counter będzie się odwoływało do tego co mamy w data i zasadzie
to powinno już działać, zobaczmy. Klikam zwiększ licznik
i jak widzisz, bez problemu nam to działa, czyli w ten sposób możemy przepisywać
zdarzenia i można tutaj podać od razu wyrażenie, które
chcemy wykonać. Natomiast innym sposobem jest podanie tutaj nazwy
metody, którą chcemy wywołać i zazwyczaj będziemy to robić w ten sposób, aczkolwiek
przy jakiś prostych rzeczach i gdzie chcemy zmienić jakiś stan. Powiedzmy
z pokazywania jakiegoś elementu na ukrywanie, można
to zrobić w ten sposób. Natomiast o tym powiemy sobie jeszcze później. Spróbuję
może zatem podać tutaj metodę. Ja bym ją nazwał increment. No
i musimy ją sobie dodać oczywiście w methods. Może
tutaj troszeczkę przewinę. Oczywiście będzie to funkcja i nie
zaskoczę cię. Ta funkcja będzie robiła po prostu discounter plus
plus. Oczywiście tutaj w metodach musi to być this,
żebyśmy się odwołali do counter'a który jest w data. No i to
powinno już zadziałać, czyli podaję tylko nazwę tej metody. Nie muszę jej tutaj w i żaden
sposób wywoływać. Aczkolwiek będzie to możliwe. Powiemy sobie o tym w jednej z kolejnych
lekcji. No i teraz po kliknięciu, jak widzisz licznik bez problemu się zwiększa i
Vue odzwierciedla to wszystko na stronie. Na koniec chcę ci
pokazać jeszcze jedną rzecz. Mianowicie możemy skorzystać
z opisu skrótowego. Podobnie jak było w przypadku atrybutów, gdzie pokazałem ci, że mieliśmy v-bind,
ale można było skorzystać z samego dwukropka i później
nazwy takiego atrybutu, który ma być tutaj zbindowany. Podobnie jest w przypadku zdarzeń. Zamiast
v-on dwukropek. Można podać od razu małpkę i nazwę zdarzenia. Będzie
to działać tak samo i ja będę w tym kursie korzystał z takiego zapisu. Jest on również, bardziej
popularny i wydaje mi się, że po prostu prostszy w zapisie, czyli małpka
click, to jest to samo co v-on dwukropek click. Powinno to zadziałać
tak samo, jak widzisz. No i oczywiście tutaj moglibyśmy
sobie jeszcze jakieś inne rzeczy dodawać, ale ostatnią rzeczą, którą chcę zrobić, żeby przypomnieć
ci że możemy również działać z atrybutami to chciałbym
wyłączyć ten przycisk wtedy kiedy Counter dojdzie do wartości 10,
więc jak możemy to zrobić. Właśnie za pomocą bindowania.
Czyli mamy takie atrybut disabled który na przycisku jest
w html'u dostępny i tutaj jeżeli podam jakiś warunek, który będzie prawdziwy,
to ten przycisk zostanie wyłączony, więc mogę tutaj podać na przykład computed property,
ale zrobimy sobie to w sposób taki wyrażeniowy, czyli jeżeli counter jest większe
lub równe 10, to wtedy ten przycisk ma mieć atrybut disabled
ustawiony na wartość true. Sprawdźmy. Zwiększamy
ten licznik i w momencie jak dojdziemy do 10, jak widzisz przycisk się wyłączył i style
do niego zostały zaaplikowane, ten przycisk teraz jest wyłączony. Widzimy, że atrybut
disabled został tutaj dodany. Oczywiście to wszystko jest cały czas reaktywne,
więc gdybyśmy w jakiś inny sposób zmniejszyli ten licznik, jak widzisz, wszystko tutaj się odblokuje,
więc myślę, że już na tym etapie zaczynasz widzieć, jak potężnym narzędziem jest Vue,
dlatego że w zasadzie wszystko robimy tutaj w tej instancji lub
jakieś drobne rzeczy możemy zmieniać w tym miejscu, ale tak naprawdę tutaj w
data mamy ten single source of truth, czyli jeżeli tutaj coś
się zmieni to jest odzwierciedlane w templatce. To zatem tyle jeśli chodzi o wstęp
do eventów. W kolejnej lekcji będziemy ten temat kontynuować.