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 pokażę ci w jaki sposób jeszcze inaczej można się komunikować
pomiędzy komponentami dlatego, że jeżeli mielibyśmy bardziej
zagnieżdżoną strukturę gdzie do naszej głównej aplikacji wstawiamy komponent, ale w jego
wnętrzu mamy kolejny komponent to taka komunikacja w górę byłaby kłopotliwa. Mamy
ten przykład, który mieliśmy wcześniej i zauważ, że w tym miejscu nasłuchujemy na zdarzenie progress
wyemitowane z tego komponentu. No więc tutaj je emitujemy i
to działa poprawnie, natomiast gdyby tutaj był jeszcze jakiś kolejny
komponent, to on by odebrał to zdarzenie progres tak naprawdę, a nie główna
aplikacja, bo on miałby to w swojej templatce i z niego musielibyśmy to przekazać jeszcze
wyżej i to może być problemem, dlatego można skorzystać z
takiego uniwersalnego busa do komunikacji,
który sobie teraz utworzymy. Wystarczy, że stworzymy sobie coś co nazwiemy bass
lub event, to popularna nazwa to event i zrobimy new Vue, czyli tworzę nową instancję nie mówił o
tej porze nową instancji. Ale zauważ, że nic jej nie przekazuje, natomiast jest
to nowa instancja, a więc ona zawiera takie opcje jak na przykład
emit, to co emitowaliśmy tutaj wewnątrz this emit, właśnie jest tutaj
dostępne na tym prototypie, więc wewnątrz jest this, ale z zewnątrz jeśli przypisze
do zmiennej to jest to event, czyli event kropka emit będzie działać dokładnie
tak samo i teraz możemy zrobić inaczej. Zakładając, że jest w tym
miejscu, mamy do tego dostęp, w modułach EcmaScript6 jeśli wiesz jak działają, moglibyśmy
mieć osobnym pliku taki event i importować go w wielu różnych miejscach i mamy
do niego dostęp, więc tutaj gdzie emitowaliśmy ten progress, tak naprawdę zrobimy
sobie event emit progress i tutaj zrobimy to samo, czyli
nie emituje już na moim komponencie, tylko na evencie, a to oznacza, że nie
możemy dłużej nasłuchiwać w tym miejscu, na naszym komponencie, bo
to nie on emituje tylko ten event was tutaj to emituje. No
właśnie, więc w tej głównej aplikacji pytanie jak możemy nasłuchiwać. Otóż jest
to bardzo proste. Przyda nam się lifecycle hook created i w
nim możemy powiedzieć event, bo do niego się odwołuje on progress,
czyli kiedy się wywoła na nim zdarzenie progress, a będziemy je wywoływać na przykład
w tym miejscu, wtedy wywołaj funkcję i w
tej funkcji będę chciał zrobić this toggle state i przekazać
jej wartość, a ta wartość wpadnie w to miejsce, ale uwaga będziemy
mieli problem dlatego że this wewnątrz tej funkcji będzie przypisane
do event'u, a nie do naszego, do naszej instancji tutaj app, więc
znowu albo trzeba zrobić vm równa się this i tutaj się
odwołać do vm albo skorzystać z EcmaScript6
z funkcji strzałkowej, która ten problem rozwiązuje, czyli zrobić to po prostu w ten
sposób. Wtedy ten this będzie się odnosił do globalnego zakresu
lub można zrobić jeszcze prościej. Możemy
to co jest tutaj w ogóle wyciągnąć i zrobić tak dlatego,
że wiem, że na progres jeśli się wykona jakaś funkcja to ona będzie mieć
automatycznie tutaj przekazane to value. Sprawdźmy czy to nam zadziała, jak
widzimy rzeczywiście to się zablokowało, a to oznacza, że jest wszystko w porządku. Zobaczmy jak
dojdzie do zera, czy się odblokuje, ale nie powinno z tym żadnych problemów. Jak
widzisz zadziało poprawnie i teraz tak naprawdę nasłuchujemy w zupełnie innym
miejscu i warto pamiętać o tym rozwiązaniu dlatego, że może
być przydatne kiedy będziemy mieli więcej komponentów kiedy będziemy chcieli żeby się ze sobą komunikowały, to będziemy mogli z dołu
coś wyemitować na takim top-level na samej górze tutaj event'cie,
a w innych miejscach na nim nasłuchiwać. Możemy to zrobić jeszcze inaczej, bo przecież
skoro jest to zwykła instancja Vue, możemy tutaj dodać method i możemy
dodać metodę, którą nazwiemy na przykład toggle state. Ona
otrzyma tutaj jakieś value i wyemituje z
siebie za pomocą this emit na
przykład progres na tę wartość, czyli żebyś
to dobrze zrozumiał todałem tutaj metodę, która będzie robić this
emit progress, czyli dokładnie to samo co zrobiłem w tym miejscu robiąc event
emit, ale teraz nie będę musiał pisać takiego długiego zapisu,
tylko zrobię event i skorzystam z jego metody, którą dodaliśmy toggle state
i przekaże wartość, która mnie interesuje. To jest taki
jeden ze sposobów, jak można to zrobić i po prostu, czyli po prostu korzystam
z metody toggle state przekazując true lub false, ta metoda nas sobie tutaj, na
tej instancji robi this emit no i reszta pozostaje bez zmian, bo tutaj
nasłuchiwaliśmy właśnie w ten oto sposób. Powinno to znowu działać tak samo, ustawmy
jakiś krótszy czas. No i jak widzisz bez problemu działa to dokładnie
w ten sam sposób i właśnie z tej komunikacji jeszcze będziemy chcieli dzisiaj
skorzystać w jednym z przykładów.