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ś w jaki sposób można zarejestrować własne filtry, globalne i lokalne, a
teraz chce ci pokazać jeszcze w jaki sposób można stworzyć własne dyrektywy,
czyli te które są wykorzystywane jako atrybuty. Pokazywałem
ci już wcześniej, że jeżeli chcesz ją odwołać do jakiegoś elementu HTML,
to możesz to zrobić za pomocą atrybutu ref. Jeżeli do tego wideo do daliśmy sobie ref
o nazwie video to mogę później się odwołać do this ref video
i mam odwołanie do tego elementu z DOM, więc mogę go odtwarzać czy pauzować,
to już widziałeś wcześniej w jednym z przykładów. Zobaczymy czy to działa. Jak
widać działa poprawnie. Natomiast chciałbym dodać sobie taką dyrektywę, która
pozwoli mi kontrolować volume tego elementu, bo co ważne, nie wiem czy kiedykolwiek
pracowałeś z elementem video w HTML5. Jeżeli go zaznaczę
tutaj. Mam go pod dolar zero. Można się odwołać do niego poprzez volume
i ustawić wartość od zera do jedynki. Na przykład ustawmy sobie to na
03 i teraz to powinno być cicho. Rzeczywiście
tak jest. Chciałbym móc na tym elemencie ustawić coś za pomocą dyrektywy
w naszej templatce, więc dyrektywy są właśnie po to, żebyśmy mogli w jakiś
sposób kontrolować elementy z drzewa DOM, chciałbym na tym wideo móc dodać
dyrektywę v-volume. Tutaj ustawię wartość na przykład 05 i
chciałbym żeby ta wartość była ustawiona docelowo na właśnie
tym elemencie tak jak to robiliśmy tutaj mamy go pod video chciałbym na
nim wywołać właśnie volume. Najpierw pokażę ci jak zarejestrować dyrektywę
globalną, czyli znowu taką, która będzie działać we wszystkich aplikacjach, które tutaj
byśmy tutaj stworzyli. Później ją przeniesiemy na lokalną, żeby działała wyłącznie tutaj wewnątrz
tego app. Wpiszemy sobie Vue directive. Podajemy
jej nazwę, samo volume bez tego przedrostka v i następnie
podajemy obiekt konfiguracyjny i tutaj mamy różne lifecycle
hooks, ale one nie mają nic wspólnego z samymi hookami, które widziałeś wcześniej
dla aplikacji, tylko są to hook'i dla dyrektywy i gdybyśmy przeszli
sobie na stronę dokumentacji to w tym miejscu możesz
więcej o tych hookach poczytać. Natomiast my będziemy chcieli skorzystać z inserted oraz za moment at oraz
za moment update, inserted jest wtedy kiedy ten element jest już wstawiony na stronę,
bo chciałbym ci przypomnieć, że chociaż nam się wydaje, że ten element od razu jest na stronie,
bo korzystamy na żywo z tych templatek prosto wstawiając to do DOM'u, to
tak naprawdę cały ten kod tej templatki może być jak widziałaś
albo w tag'u script albo w samym string'u i wtedy ten element rzeczywiście
nie jest na stronie, więc musimy tak to traktować. Dlatego chcemy zareagować na taki hook, który
się nazywa inserted i tutaj będziemy mieli
funkcje, która otrzyma el i będzie to dokładnie odwołanie do tego elementu oraz
taki obiekt, który się nazywa binding i może
ja ci pokażę co jest z tym obiekcie binding, żebyśmy mogli zobaczyć czy to rzeczywiście ma
sens. Mamy tutaj coś takiego, mamy expression
to jest wyrażenie które ktoś wpisał w tym miejscu gdybyśmy tu wpisali Dwa plus Dwa to literalnie
byśmy wzięli dwa plus dwa. Nie będzie nam to potrzebne. Modifiers
są po to, że można tutaj byłoby sobie do tego to dawaj jeszcze jakieś modyfikatory.
Jeżeli dodalibyśmy mod, to byśmy go tutaj zobaczyli
w modifiers. Natomiast to nie jest nam konieczne, warto
jednak wiedzieć, że tutaj takie opcje są, ale przede wszystkim mamy value
05 i ta wartość będzie nam szczególnie w tej potrzebna. Skoro pod el
mamy element o którym mowa, to teraz wystarczy zrobić coś takiego el volume
równa się binding value. Okej,
sprawdzimy. To się wszystko wczytało i możemy zaznaczyć ten element
i potwierdzimy sobie jaki jest jego volume. Jest ustawione na 0.5,
a więc dokładnie tak jak chcieliśmy. Ja chciałbym jednak, żeby
to volume mogło być podawane tutaj w tym miejscu, bo moglibyśmy stworzyć metody,
które by to zmieniały, na przykład moglibyśmy mieć jakiś suwak i tak dalej, więc
wstawimy sobie to w to miejsce i chciałbym żeby volume domyślnie miało wartość 1 i
w tej dyrektywie zamiast wpisywać to tak literalnie wpiszemy 1. W zasadzie
nie 1, tylko volume. Okej, czyli odwołanie do tej właściwości z obiektu data,
będzie to działać dalej tak samo, tylko
teraz problem będzie taki, że jeżeli sobie coś zmienimy tutaj. Jeżeli
volume byśmy zmienili na wartość mniejszą, czyli na przykład 0,5 to
niestety, ale nie jest odzwierciedlone w tym miejscu, czyli tutaj volume nie
ustawi się na 05. Natomiast możemy również sobie z tym
poradzić. Korzystając z kolejnego hook'a. Nazywa on się
updated, czy w zasadzie update, okej i w nim
będziemy chcieli zrobić to samo, to znaczy, że jeżeli wartość tego volume się zmieni to chcemy
to od nowa ustawić. Okej, sprawdźmy to. Sprawdzimy tutaj.
Zmieniam na 03 i na tym elemencie po prostu
natywnie potwierdzimy mamy wartość 03 natomiast powtórzyliśmy
dwa razy identyczną funkcje i twórcy wzięli to pod uwagę i zamiast
2 razy taką funkcję przepisywać bo zazwyczaj właśnie na insert oraz
update chcemy zrobić dokładnie to samo to zamiast całego tego obiektu można
od razu podać funkcję w tym miejscu ale ja to zrobię już jako lokalną
dyrektywę żeby ci pokazać jak to działa ta byłaby globalna czyli v-volume działałoby
wszędzie. Natomiast ja chciałbym żeby ona działała tylko lokalnie, więc podobnie
jak w przypadku filtrów możemy tutaj zrobić coś takiego jak directives i możemy
je sobie tutaj podać po prostu volume i ja wkleję taką jedną funkcję. Mógłbym
tutaj wkleić cały ten obiekt, który widzieliśmy, ale tak jak ci mówiłem jeżeli potrzebujemy
na inserty teraz update mieć to samo to zamiast tego obiektu dajemy
sobie funkcje. Sprawdźmy czy tam to zadziała, okej.
Zmieńmy tą wartość na przykład na 03
i potwierdzimy, że mamy tutaj 03 okazuje się że tak
możemy odtwarzać i ten dźwięk nie jest aż tak głośny. Dyrektywy
mogą być jeszcze troszkę bardziej zaawansowane jeżeli będziesz chciał zachęcam żebyś troszeczkę
więcej o tym poczytał. Nie tak często musimy z nich korzystać, ale chciałem ci pokazać
praktyczny przykład jak dyrektywy można wykorzystać. A więc dyrektywy przydają się zawsze
kiedy chcemy w jakiś sposób kontrolować elementy HTML. Natomiast
jeżeli coś możemy zrobić bez użycia dyrektywy, za pomocą tylko tych
reaktywnych danych, to prawdopodobnie jest lepszy sposób, żeby na tym
polegać.