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
Jak zapowiedziałem dodajmy sobie teraz do tego projektu możliwość edytowania tych
danych. No i oczywiście chcemy je edytować w taki sposób, aby to było odzwierciedlane
w całej aplikacji, czyli aby te dane nie tylko w tym komponencie były zmienione. Zaczniemy
od templatki, którą będziemy chcieli przygotować. Przejdziemy do naszego
komponentu i będziemy też potrzebowali data. Przypominam,
że w komponentach jest to super ważne. Data to musi być funkcja
zwracająca obiekt tak, aby każdy komponent miał indywidualny obiekt,
który jest tutaj wewnątrz, więc dopiero tutaj dodamy to co nas interesuje i
chciałbym dodać Edit Mode i ustawić to na wartość false. Kiedy
przejdziemy do trybu edycji to wtedy będzie to inaczej wyglądać i będziemy właśnie ten flagę tutaj
mogli zmienić i teraz przejdziemy sobie w to miejsce gdzie mieliśmy
właśnie user i chciałbym zrobić coś takiego, że user full name
będzie wyświetlany tylko wtedy jeżeli nie jesteśmy w trybie edit mode. Nie
chcę natomiast tego elementu oplatać żadnych dodatkowym div'em, więc przypominam ci, że
mogliśmy skorzystać z template, w ten sposób i jej dodamy v-if
i tutaj będzie po prostu not edit mode i
wtedy to co jest wewnątrz będzie pokazane bez
tego elementu template, więc może to zróbmy w ten sposób albo jeszcze
zrobimy inaczej. Tutaj zrobimy v-else, a wyżej
zrobimy kolejną templatkę i tutaj będzie v-if, jeżeli edit mode
ma wartość true, to chcemy wyświetlić to co jest tutaj. No
i ten v-else będzie korespondował właśnie z tym, więc jeżeli zrobimy coś takiego nic
się tutaj nie zmienia, ale jeżeli edit mode zmienimy może tutaj sobie coś
wpiszmy coś, okej i przejdziemy
jeszcze to narzędzia Vue. Zauważ, że tutaj, co jest też fajne pokazuje nam się wiele
tych komponentów i w pierwszym z nich zmieńmy edit mode tutaj
mamy jego data i props'y, widzimy też osobno, naprawdę super narzędzie. Zmienimy
to, jak to zmienię, to widzisz, że ta templatka jest generowana i tutaj
będę chciał stworzyć sobie input'a i ten input będzie miał v-model przypisany
właśnie do user full name, więc ja tutaj stworzę takiego diva
form-group, po to, żeby to wyglądało ładnie. Przy
okazji, jeżeli widzisz, że ten string tutaj nie jest fajnie podświetlany, nie jest kolorowane
jak html, to powiem ci, że docelowo i tak będziemy troszeczkę
inaczej pracować z Vue, szczególnie kiedy będziesz trochę bardziej zaawansowany, może już jesteś,
być może pracowałaś z innymi framework'ami. Ja jednak ten kurs prowadzę w taki
sposób od podstaw, więc nie przechodzę od razu do tamtych bardziej skomplikowanych
zagadnień, ale jeżeli będziemy pracować z komponentami, gdzie będziemy mieć templatkę w osobnym pliku, to
będzie to wszystko ładnie kolorowane, na razie się tym nie będziemy martwić, ale warto żebyś zdawał
sobie z tego sprawę, że można wygodnie z tym pracować. Dodamy sobie tutaj input, może
zrobię to za pomocą emmeta, żeby było szybciej type text oczywiście, class
form input i v-model. Dodamy lazy,
bo chciałbym żeby on aktualizował się dopiero wtedy kiedy z niego wyskoczymy. Chcę
ustawić na user full name. Jak widzisz, możemy też robić w
ten sposób. Wcześniej się nie odwoływaliśmy po kropce do jakich rzeczy, ale skoro pod user
przekazanym jako prop mamy tak naprawdę obiekt, to możemy się
odwołać do jednej z jego właściwości, okej zróbmy to w ten sposób i
teraz żeby jeszcze to odzwierciedlić to będę chciał wyświetlić
sobie tutaj w naszej głównej aplikacji wszystkich użytkowników,
ja wkleję fragment kodu, zrobimy to w ten sposób. Chciałbym
wyświetlić listę ol, gdzie przeiteruje też po wszystkich użytkownikach i chce
wyświetlić po prostu full name i age. Tutaj jesteśmy w głównej aplikacji, nie
w komponencie, ale jeżeli coś zmienimy w komponencie, chciałbym, żeby było zmienione też w głównej aplikacji i powinniśmy
to tutaj zobaczyć, więc jeżeli teraz sobie to odświeżymy, jeszcze raz byśmy
tutaj przeszli do tego edit mode, Jan Kowalski, jak
widzisz pojawiło nam się to poprawnie i jeżeli to zmienię w ten sposób tutaj
się jeszcze nie zmieniło, bo dodałem lazy, ale jeśli wyskoczę z tego pola, zauważ,
że wszystko poprawnie się zmienia czyli Vue wykryło te zmiany, zmieniło je tak naprawdę
w tej globalnej tablicy, bo obiekty są przechowywane i przekazywane przez
referencje i wyświetliło to również tutaj, więc znowu mamy
Single Source of True, jeżeli coś zmienimy w jednym miejscu musi być zmienione wszędzie.
Okej, więc teraz dodajmy sobie jeszcze przycisk, który nam będzie po prostu zmieniał
ten edit mode, żebyśmy nie musieli tego robić przez narzędzie deweloperskie. W takim
razie może byśmy tutaj sobie dodali coś takiego jak edytuj okej
I teraz naszym komponencie będziemy musieli również dodać takie
Tede tutaj przed tym w którym mamy przycisk do usuwania
więc ja sobie to skopiuję bo to będzie bardzo podobne z tym że ten
przycisk tutaj do edycji i będzie miał troszeczkę inną trasę będzie to Edit i
tutaj zamiast remove zrobimy sobie po prostu bezpośrednio
wyrażenie czyli Edit Mode równa się not
edit Czyli po prostu chcemy zmienić na taką wartość Jaka tam
nie jest czyli na przeciwną okej sprawdzimy wygląda
to w ten sposób może jeszcze żeby to lepiej wyglądało to zamiast errorZrób mi tutaj primary
teraz Jeżeli kliknę Edit Mode Jak widzisz
edytujemy tutaj Ważne jest to że zmieniając to Edit Mode zmieniamy to tylko
w tym jednym komponencie każdy ma izolowany zakres Tesco o którym
ci mówiłem więc nie zmienia się to gdzie indziej zmienimy tutaj Jan Kowalczyk
wyskakuje z tego pola mogę tutaj
zakończyć, żeby jeszcze raz to kliknąć żeby wyskoczyć z tego edit mode zamknąć
i jak widzisz zostało to odzwierciedlone w tym miejscu. Natomiast zróbmy sobie jeszcze jedną
rzecz korzystając z zapisu klas. Znowu fajnie nam się to wszystko połączy
w jedno, a więc będę chciał klasę zmienić, czyli tutaj miałem icon
edit. Ja tą klasę stąd usunę, a będę chciał tutaj bindować
klasy, tak jak ci pokazywałem i wpiszemy taki obiekt. Chcę dodawać klasę icon edit,
tylko jeżeli jesteśmy w edit mode, w zasadzie kiedy nie jesteśmy,
a druga klasa to będzie icon
check i ją chce dodawać wtedy kiedy jesteśmy edit mode. Świetnie
nam to zadziała, to się oczywiście wszystko połączy razem z tym atrybutem klas,
powinno działać i jak widzisz rzeczywiście teraz ta klasa jest
podmieniona i co za tym idzie zmienia się ikonka. Jeżeli dokonam zmian mogę kliknąć
jeszcze raz, żeby zamknąć tryb edycji. Świetnie nam
to wszystko już działa, jak możesz zobaczyć i naprawdę niewielkim wysiłkiem to zrobiliśmy,
a połączyliśmy mnóstwo już wiedzy, którą do tej pory zdobyłeś, natomiast na
koniec chciałbym ci jeszcze w kolejnej lekcji pokazać jak możemy tę
całość, która jest tutaj, zamknąć w komponencie rodziców i wtedy
unikniemy na przykład takich problemów jak to, że tutaj musieliśmy robić atrybut is,
bo przeglądarka nie rozumiała wewnątrz edu user.