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
Zobaczyłeś jak dane są przekazywane w dół do komponentu, czyli jeżeli tutaj
się zmieni init value, jest to odzwierciedlane w komponencie, natomiast
gdyby w komponencie zmienił intc value, nie byłoby to zmienione u góry, bo
w dół komponenty, jak widzisz komunikują się za pomocą props, ale
do góry muszą się komunikować za pomocą eventów i teraz chciałbym zrobić taką rzecz,
że w momencie kiedy ten counter uruchomię, żeby zablokować to pole select, bo
zauważ, że w dowolnym momencie, jeżeli zmienię coś tutaj to props jest przesuwany
tutaj na dół, no i jak widzisz od nowa nam się to wszystko odlicza, więc
chciałbym to zablokować, kiedy tutaj wyemitujemy pewne zdarzenie i
teraz jak możemy to zrobić. Chciałbym do naszej głównej aplikacji dodać
sobie właściwość, którą nazwiemy in progress będzie
to false. Zauważ, że nazywa się ona tak samo jak w naszym komponencie. Nie ma to
absolutnie żadnego znaczenia po prostu tak samo sobie chciałem nazwać, one są zupełnie od siebie
niezależne i teraz na etapie templatki, czyli tutaj naszego
głównego komponentu, czyli głównej aplikacji w zasadzie będę chciał zrobić
coś takiego, że ten select ma być zablokowany, czyli zbindujemy disabled. Jeżeli
inProgress będzie miało wartość true, czyli domyślnie jak
widzisz nic się tutaj nie zablokuje, bo mamy tam wartość
false i teraz pytanie w jaki sposób możemy tę wartość zmienić. Możemy
to zrobić nasłuchując na zdarzenie na naszym komponencie, czyli w tym miejscu, tu
jesteśmy cały czas w templatce głównej aplikacji i możemy na naszym komponencie przypisać
zdarzenie, tak jak przepisywaliśmy na przykład kliknięcie, co ciekawe taka ciekawostka,
bo tego w osobnej lekcji nie pokazywałem, jeżeli tutaj napiszesz plik native
równa się coś to zdarzenie kliknięcia zostanie przypisane do pierwszego
elementu, który się tutaj znajduje w templatce, czyli do tego, to nam jest
niestety tutaj niepotrzebne, ale może warto sobie to gdzieś zanotować, ale
możemy przypisać event do tego edu counter'a, który nazwiemy dowolnie.
Ja go nazwę progres i w momencie kiedy on się wykona to będziemy
chcieli wykonać naszą metodę toggle state. Ja
taką metodę będę chciał sobie utworzyć. Mówimy cały czas o naszej głównej aplikacji, więc
podajmy metodę toggle state i on
jakąś wartość tutaj otrzyma i coś będziemy chcieli są wartością zrobić. Zróbmy
to za moment, natomiast teraz pytanie, w jaki sposób wyemitować
takie zdarzenie, bo samo z siebie nic się tak naprawdę nie wydarzy, ale zrobiliśmy
tyle, że powiedziałem, że nasłuchuje na tym komponencie, na custom'owe
zdarzenie o nazwie progress, więc teraz przejdźmy do tego komponentu i będziemy
mogli takie zdarzenie wyemitować, czyli w tym miejscu w którym zmieniliśmy state
i tak naprawdę będzie to w metodzie start ustawiliśmy
inProgress na true, zrobimy this dolar czy odwołujemy się do
czegoś specyficznego dla Vue. Jest to metoda emit i mogę napisać progres,
czyli chce wyemitować z mojego komponent zdarzenie progress i mogę
przekazać dane jakie chce tam przekazać. Tu mogłbym napisać true, a napiszę
sobie this inProgress, czyli taka sama wartość jak w tym miejscu akcja miejscu. I
to jest jedna rzecz natomiast kiedy odliczanie się zakończy i zmieniliśmy
to na false to wyemitujmy this emit, znowu progres,
ale z wartością false, czyli this inProgress, które linijkę wyżej
zmieniłem na false, w ten sposób komponent nasz będzie emitował zdarzenia
i na nie będziemy mogli nasłuchiwać. Zrobiłem console log, być może
zauważyłeś tutaj w momencie kiedy się wywoła toggle state i zobaczmy jaki będzie value, będzie to true,
a później jak to się zakończy to będzie
to false i to co jest ważne, to właśnie jeżeli podajemy do
tego zdarzenia, podobnie jak w przypadku kliknięcia tylko nazwę metody to pod pierwszy jej
parametr tutaj wpadnie to, co z komponentu podamy w
tym miejscu, ale gdybym chciał się do tego odwołać w jakiś inny sposób albo
nie przekazywać tutaj do metody albo przekazać jeszcze jakiś inny parametr, to mogę się odwołać
do event, tak samo jak przy kliknięciu i pod tym event nie będzie żadnego obiektu,
pod tym event będzie dokładnie to co wyemitowaliśmy w tym miejscu, czyli true lub false. Z
tego powodu nie musielibyśmy nawet tutaj tworzyć metody, bo moglibyśmy inProgress
zmienić na event, czyli na wartość true lub false i super
ważna rzecz to inProgress na tym etapie gdzie jesteśmy teraz, w templatce
aplikacji to jest inProgress, który jest w tym miejscu, ja je
nazwałem tak samo jak w komponencie. Może cię to troszeczkę mylić, natomiast dlatego
chcę to wytłumaczyć, zmieniamy to co jest w tym miejscu, tutaj u góry nie mamy dostępu
do niczego, co jest wewnątrz komponentu, tyle by wystarczyło, ale ja sobie wrócę
do tej metody toggle state. Pamiętaj, że po prostu tutaj event, to jest to co wyemitujemy
z naszego komponentu. Sprawdźmy czy to będzie działać, wróćmy
jeszcze może tutaj, bo musimy to nadpisać, czyli inProgress w
tym miejscu. Chcę zamienić
na true lub false wyemitowane właśnie stamtąd. No
i jeżeli inProgress zmieni się na true to powinna zostać
zablokowana ta lista. No i zobaczymy, jak
widzisz tak to się stało, teraz nie mogę tutaj zmienić tego, tak długo jak odliczanie
trwa. Kiedy ono się zakończy wyemitujemy progress false i powinno to zostać
zmienione. Jak widzisz, tak też się stało. Zmieniam i możemy
ponownie uruchomić nasz komponent. No
i jak widzisz działa to bez problemu. Tak zatem wygląda komunikacja
w górę, natomiast ona w pewnych sytuacjach może stać się trochę kłopotliwa,
ale o tym sobie powiemy jeszcze troszeczkę później w praktycznym przykładzie i będzie
to widać. Tam wykorzystamy troszeczkę inne rozwiązanie. Niemniej jednak z tych dwóch lekcji zapamiętaj,
że komunikacja w dół poprzez props jest jakby automatyczna, jeżeli coś
się zmieni w rodzicu i ten rodzic przypisywał daną wartość do props swojego
dziecka jakiegoś komponentu, będzie to przekazane w dół, ale z dołu musimy emitować
zdarzenia, na które możemy nasłuchiwać u góry. Oczywiście tych zdarzeń może być dowolna ilość,
wolna liczba i możesz jej przepisywać właśnie w taki oto sposób.