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
System templating'u, który jest w Vue.js dostępny jest naprawdę bardzo prosty
i nie jest rozbudowany. Natomiast jeszcze nie wszystko ci pokazałem, chciałbym w tej lekcji na
kilka rzeczy jeszcze zwrócić uwagę. Najważniejszą rzeczą jest
ta interpolacja. Czyli możemy tutaj jak ci pokazałem wyrażenia
JavaScript nowe dowolne wstawiać. Tutaj skorzystałem z wyliczonej
właściwości, ale mógłbym do niej tutaj dopisać za pomocą plusa, czyli połączyć ten string,
jeszcze inne rzeczy i bez problemu by nam to zadziałało. Natomiast
praca z templatkami opiera się z jednej strony na takiej interpolacji,
a z drugiej strony na korzystaniu z dyrektyw. Jedną z dyrektyw, które już
poznałeś i jest v-cloak i ona, tak jak widziałeś pozwala
nam w CSS na przykład ukryć taki element i ten atrybut jest usuwany przez Vue kiedy
instancja zostanie utworzona. Natomiast mamy jeszcze inne dyrektywy,
bardzo wiele z nich poznasz jeszcze w tym kursie, ale chciałbym ci pokazać dwie, ciekawe
które służą do pracy z tekstem lub do pracy z
kodem html, czyli alternatywą dla takiego zapisu full name
byłoby do tego H1 dodanie dyrektywy
v-text równa się i tutaj w tym atrybucie podali byśmy,
nie to nie pomyślałeś, full
name, ale w ten sposób, full name, czyli
przekazujemy nazwę oczywiście Vue sobie to znajdzie w computed i
zwróci odpowiednią wartość i podstawi to tutaj. Zobaczmy,
jak widzisz Jan Kowalski, działa to dokładnie tak samo, czyli jeżeli nie chcesz robić interpolacji,
jest ci wygodnie w ten sposób, możesz to tak zapisać. Szczególnie później kiedy
będziemy pracować z pędzlami, może będzie wygodniejsze dla ciebie zapisywanie tego w ten sposób,
czyli taka dyrektywa, pamiętaj istnieje i działa dokładnie tak samo jak
byśmy tutaj zrobili interpelacje. Co ciekawe, gdybyśmy tutaj do tego
dopisali sobie jeszcze wykrzyknik, oczywiście ważne jest tutaj to, że cudzysłowy,
jeżeli mam w tym atrybucie html'owym. No to nie mogę tutaj podać kolejnych cudzysłowów. Muszą
to być apostrofy i jeżeli chcesz string to nie możesz tutaj sobie napisać na
przykład Hello, to Vue będzie tego Hello wyszukiwać w data lub computed
i nie zadziała nam poprawnie, więc jeżeli tutaj chcesz sobie stworzyć takie
wrażenie JavaScript'owe, to string musisz dopisać w ten sposób. Dokładnie to samo
tyczy się tego gdybyśmy to wpisali tutaj w tej interpolacji. Natomiast
dlaczego ci to pokazuje, otóż dlatego, żebyś wiedział, że nawet w treści atrybutu html'owego
można wpisywać wyrażenia JavaScript'owe. Natomiast tu pokażę
ci teraz inną rzecz, bo powiedzmy, że chcielibyśmy
to full name opleść tag'iem strong,
żeby to wyświetlić, w taki sposób pogrubiony. Tutaj w tych stylach H1
być może to się jakoś specjalnie nie zmieni, ale spróbujmy sobie to zrobić, to
powiedzmy, że miałbym metodę, którą
bym nazwał embolden. Oczywiście tutaj jest obiekt. Przyjęłaby
jakąś wartość i zwróciła by string, czyli
plus ta wartość plus strong,
okej w ten sposób. Pytanie, co się stanie jeżeli tutaj jest v-text
spróbuję skorzystać z embolden. Pamiętaj, w interpolacji zadziałało by to tak
samo. Więc zróbmy embolden i przekażemy wartość sposób,
okej i zobaczymy taki
oto zapis, a to nam mówi, że Vue domyślnie robi tak zwany escape wszystkich
znaków i gdybyśmy to w tej interpolacji tutaj zapisali
dokładnie tak samo by to zadziałało, czyli kod html nie jest dozwolony i teraz
pytanie co, jeżeli ty koniecznie chciałbyś, aby tekst, który
zostanie przekazany był traktowany jako kod html, jeżeli na
przykład będziemy jakieś dane pobrane jsonem, może się okazać, że jest
to treść jakiegoś postu w jakim systemie CMS i chcemy, żeby
wszystkie tagi, które tam się znajdą, paragrafy, obrazki i tak dalej były potraktowane
dosłownie jako kod html, to wtedy wstawialibyśmy
je oczywiście tutaj i znowu jeżeli tutaj zrobie embolden full
name to zadziała to tak samo i nie ma takiej możliwości, żeby tutaj zrobić
to inaczej. W niektórych systemach templating'u na przykład handlebars wystarczy
dodać trzeci taki oto nawias i wtedy
zostanie to potraktowane dosłownie. Jak widzisz w Vue otrzymamy błąd. Przy
okazji przydała nam się developmencka wersja Vue, która generuje nam błędy, po to
właśnie ją mamy, czyli nie ma specjalnie możliwości, żeby tutaj zrobić to w taki
sposób interpolując, ale mamy specjalną dyrektywę
nie v-text, ale h html, która pozwala nam coś
takiego zrobić, więc jeśli tutaj jej przekażemy coś co będzie zawierać sobie kod html,
w naszym przypadku to jest wywołanie metody full
name, ale to może być właściwość jakaś sobie tu json'owego cokolwiek to
tutaj tym razem zostanie to potraktowane dosłownie i jeśli zerkniemy do
drzewa DOM, ten strong zostanie tutaj dodany, więc jeżeli chcesz pracować z HTML'em, v-html,
jest twoim najlepszym przyjacielem i na koniec
chcę ci pokazać jeszcze jedną rzecz. Możemy dodać dyrektywę,
która się nazywa v-once do dowolnego elementu i ten
atrybut to oznacza, że tylko raz chcemy wyrenderować pewne dane, zobacz, działa to tak
samo, ale jeśli przejdziemy sobie tutaj i zmienimy coś first
name czy last name, wiemy że wtedy full name tak naprawdę musi się zmienić no
i w zasadzie ta metoda też musi być wywołana od nowa, ale jeśli dodaliśmy v-once
to nie powinno pozostać podmienione, czyli jeśli napisze Janek to
jak widzisz na stronie nic się nie zmienia, więc jeżeli z jakiegoś powodu będziesz chciał, żeby
jakieś dane tylko w przypadku pierwszego wczytania się strony zostały podmienione,
ale później one nie mają już być reaktywne to dodajesz
sobie dyrektywę v-once, no i w zasadzie to jest tyle, jeżeli chodzi
o pracę z templatkami, bo później w tym kursie jeszcze zobaczysz jak pracujemy z pętlami,
ale to wszystko będzie realizowane za pomocą dyrektyw, czyli zapamiętaj,
że mamy taki oto zapis i jest to interpolacja i mamy
również zapisy za pomocą dyrektyw i to
tyle jeśli chodzi o te templatki.