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 kontynuujemy nadal pracę nad komponentami i pokażę
ci w jaki sposób działają tak zwane sloty i co one mogą nam
zaoferować. Na początek przejdźmy sobie tutaj. Mamy w zasadzie
dokładnie taką samą aplikację jak w lekcji poprzedniej, natomiast chciałbym móc
dobrać sobie slot i slot jest takim miejscem, w którym może wpaść treść
Przekazano do komponentu. Do tej pory ja tobie pokazywałem, że kiedy
sobie taki komponent stworzyliśmy, czy to będzie komponent dokładnie ten tutaj czy gdybyśmy
chcieli wstawić na przykład edu users to
taki komponent domykaliśmy i wspominałem ci, że możemy taki komponent domknąć
od razu, ale nie wtedy kiedy jesteśmy w tej żywej templatce w drzewie DOM,
tylko jeżeli jesteśmy w takiej templatce, jak na przykład tutaj. Mówiłem, że możemy
go domknąć jeżeli nie przekazujemy do niego treści, ale nie pokazałem ci że treść możemy
przekazać. Jeżeli komponent mamy zrobiony w ten sposób, to tutaj można coś
wpisać, tylko pytanie co się z tym stanie, bo przecież wiemy, że cały ten
element jest podmieniony treścią tego, co ma tutaj zapisane, czyli edu users
będzie miał taki szablon, więc co się stanie z tym co wpiszemy tutaj wewnątrz. Otóż
okazuje się, że to co tutaj wpiszemy może być wstawione w dowolnym
miejscu w szablonie naszego komponentu, gdzie podamy slot i podobnie
będzie z tym komponentem dynamicznym, dlatego będę chciał na nim ci to pokazać.
Chciałbym tutaj coś wstawić. Oczywiście wiesz, że tutaj raz będzie edu home, a
raz będzie edu users i w zależności czy jeden albo drugi komponent będą
oferowały slot to to co tutaj wstawimy będzie działać lub nie, ale nie będzie
to generować tak czy siak żadnego błędu, więc może być po prostu tutaj dodane,
więc chciałbym tutaj sobie wstawić coś takiego jak
mieliśmy w tym miejscu, H1 z tym
że super super super ważna rzecz. Te wszystkie rzeczy, które są tutaj to
nie jest tak że jeżeli w to miejsce zostanie wczytany komponent na przykład edu home, to
z niego zostaną wzięte te właściwości, nie. Cały czas
tutaj jesteśmy w templatce rodzica, czyli w tej głównej aplikacji i message tekst
w tym momencie było wybrane z tej głównej aplikacji, a tutaj czegoś takiego nie ma. Natomiast
ja chcę tutaj wstawić sobie coś na sztywno. Można tutaj byłoby te właściwości
dodać do głównej aplikacji, ale ja chcę tutaj wstawić może
dokładnie takie teksty jak są w tym miejscu, czyli chce skorzystać z komponentów, w tym
przypadku jest on dynamiczny, ale tak jak ci powiedziałem to nie ma żadnego znaczenia, moglibyśmy
po prostu wpisać edu home i chcę żeby taka treść mogła
być umieszczona wewnątrz. No właśnie, jak to zrobić, przyjdziemy sobie do edu home,
bo w tym komponencie chcę to zrobić, w momencie kiedy zmienimy w nawigacji
na edu users to po prostu ta treść będzie zignorowana, ale do edu home
sobie dodamy i w tym miejscu, gdzie robiliśmy coś takiego to będę
chciał dodać slot. Jest to taki specjalny
element i dokładnie do niego wpadnie to,
co zostanie przekazane w tym komponencie. Wiemy, że tutaj edu users w zasadzie
edu home zostanie podstawiony. Natomiast bezpośrednio do edu home można zrobić, byłoby
to samo. No i tutaj to powinno zostać podstawione, więc odświeżmy i sprawdźmy.
Dokładnie tak też się stało, więc teraz ta treść jest zewnętrzna
i mogę tutaj dodać sobie na przykład wykrzyknik i upewnijmy się dokładnie,
wszystko działa jak powinno. Z tym, że jak wspomniałem, jeżeli tutaj skorzystałbym na przykład z message,
to zostanie tutaj podstawione message z głównej aplikacji, a nie z wewnątrz,
mimo tego, że tak naprawdę ta treść pada w to miejsce. Co jest ciekawe możemy
również podać domyślny slot, czyli tutaj mógłbym z powrotem wkleić to, co mieliśmy i jeżeli
ktoś nie poda tego slota to to będą wartości domyślne. Tym
razem message i text, tak jak wcześniej jest brane z tego konkretnego komponentu. Czyli
jeżeli w tym slocie będzie pusto, wyświetlą się te
domyślne wartości. Natomiast jeżeli coś podamy i zróbmy sobie tutaj H2, żeby
widać było różnicę, to wtedy to zostanie podstawione, a
wartość domyślna którą wstawiliśmy w tym slocie zostanie zignorowana. To
może być bardzo przydatne kiedy tworzysz własne komponenty i chcesz pozwolić na to aby
jakaś treść była do nich przekazywana i dzięki temu ty możesz wybrać, w którym miejscu w
twojej templatce to się pojawi. Jeżeli tutaj byłaby bardziej zaawansowana struktura,
to dokładnie ty wybierasz gdzie to się pojawi. Natomiast można również stworzyć
kilka slotów i to będę chciał ci pokazać lekcji kolejnej. Tutaj jeszcze
tylko przejdźmy sobie do użytkownicy i jak widzisz nic złego się nie wydarzyło, bo
chociaż do tego komponentu tutaj przekazujemy ten slot, to nigdzie w
templatce edu users z niego nie skorzystałem. Po prostu ta treść została
zignorowana. Okej, to tyle w tej lekcji, jak widzisz nie
jest to rzecz skomplikowana, ale pokażę ci w kolejnej, jak możemy kilka nazywanych
slotów utworzyć.