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, że aplikacja wcale nie musi być montowana do strony,
czyli jej kod nie musi być wstawiany do drzewa DOM. Zaraz po tym
jak wczyta się cały twój skrypt. Możemy sami wybrać, w którym momencie zamontujemy
naszą aplikację tutaj do żywej strony, czyli do obiektowego nowego modelu dokumentu. Mamy
taką prostą aplikację jak wcześniej i teraz będę chciał ci pokazać na czym rzecz polega. Otóż
wystarczy, że nie dodamy tutaj tego oto atrybutu, tej
właściwości el, czyli nie powiemy Vue gdzie ma
zamontować, czyli do którego elementu ma zamontować naszą aplikację i zobacz,
nie generuje to żadnego błędu, po prostu aplikacja się nie pojawia i ona jest niewidoczna,
przypominam dlatego, że zadaliśmy atrybut v-cloak i tutaj zdefiniowaliśmy,
że ma mieć on wartość display none w CSS. Normalnie widzielibyśmy
coś takiego, tak jak widzisz tutaj i teraz pytanie w jaki sposób
możemy w dowolnym momencie zamontować sobie taką aplikację. Otóż musimy
przechwycić sobie instancje, czyli do tej pory tworzyliśmy new vue i nie
interesowaliśmy się aż tak bardzo tym co jest zwracane, chociaż pokazywałem
ci to tutaj w przeglądarce. To jest dokładnie to samo co będziemy mieli tej pod zmienną. Zauważ,
że teraz jej nie ma, bo jeszcze aplikacja się nie uruchomiła, ale tutaj w kodzie tego jakoś
nie wykorzystywaliśmy, więc teraz sobie to przechwyćmy pisząc var vm
i możemy zrobić coś takiego. W dowolnym momencie, więc może zróbmy sobie settimeout,
żeby to pokazać i po jednej sekundzie będę chciał wywołać tę
funkcję i w tej funkcji wpiszemy sobie vm dolar mount
i podamy selector i zauważ, że to jest też to co ci pokazywałem,
kiedy robiliśmy console dir instancji, że bezpośrednio na tym
vm, bo to jest to samom co tutaj this, mamy dostępne nasze rzeczy, które
daliśmy do data czy które były w computed. Natomiast wszystkie
które są poprzedzone dolarem to są to jakieś właściwości lub metody, właśnie
dodane przez Vue. Jedną z nich jest mount, która pozwala zamontować aplikację.
No i zobacz, co się teraz stanie. Odświeżam i po jednej sekundzie aplikacja
została zamontowana. Jest jeszcze inny sposób, aby zamontować aplikację. Możemy
od razu zrobić vm mount, a to sprawi,
że aplikacja jakby wyrenderuje cały
swój kod i przepisze wszystkie event handler'y które tam będą później i tak
dalej jeszcze o nich się nie uczyliśmy. Natomiast nie pojawi się na stronie, a żeby dodać
do stron tą aplikacje, to możemy to zrobić w następujący
sposób. Tutaj sobie wyszukamy na stronie, poprzez document query selector,
na przykład elementu app i do
niego będziemy chcieli dodać przez appendChild, czyli tutaj to nie jest nic wspólnego, to
nie ma nic wspólnego z samym Vue. Będziemy chcieli dodać to co jest pod vm i znowu
właściwość poprzedzona dolarem el, czyli vm mount tutaj stworzy
całą templatkę pod tym kluczem, pod el i będziemy
to mogli zamontować na stronę. Natomiast, zobaczymy co tutaj nam się pojawi. Jak widzisz,
mamy ostrzeżenie od Vue i ono nam mówi, że nie mamy templatki.
No właśnie. Drugą rzeczą, którą chcę ci pokazać w tej lekcji jest nie tylko to, że
możemy opóźnić jakby montowanie tej aplikacji poprzez vm mount, ale
że możemy korzystać również zewnętrznych templatek i w tym sposobie, w którym robimy vm mount
nie podając tutaj selector'a tego elementu, który ma być traktowany jako
szablon. Musimy podać szablon w inny sposób i na to sposoby
są dwa. Pierwszy z nich, który można też wykorzystywać później przy komponentach, których
będziemy się uczyć, jest to wpisanie templatki tutaj poprzez template i
będzie to po prostu template string, czyli musimy tutaj wstawić sobie naszą templatkę.
Więc powiedzmy, że to skopiuję i wstawię to w to miejsce. Oczywiście
nie jest to zbyt wygodne i jeżeli chcemy to wpisać w ten sposób, bo w JavaScripcie
nie możemy złamać sobie string'u na wiele linijek. Chyba, że skorzystamy z tak
zwanego template stringów ES6. Zakładam, że podejmując ten kurs,
znasz już podstawy składni ES6. Takie backtick'i pozwalają nam tworzyć string na wiele linijek i jest
to już wygodniejsze. Niemniej jednak ja to zostawię na razie w ten sposób, a z ES6
będziemy korzystać później. Jeżeli zrobimy to w ten sposób, odświeżę, to
wydaje się, że powinno nam to zadziałać, zgadza
się, zadziałało tylko, że samo app teraz nie jest już kontrolowane
przez Vue, więc v-cloak nie zostało usunięte. Stąd ten element
jest niewidoczny, ale jeżeli sobie to odświeżymy to, jak widzisz, działa to
po jednej sekundzie. Oczywiście powinienem wtedy usunąć ten element, który jest tutaj, zobacz
i widzimy, że to działa poprawnie. Jeszcze innym sposobem jest
zapisanie templatki w skrypcie. Nie wiem czy się z tym spotkałeś, ale na przykład w handlebars
możemy tak robić. Tak to działa, że jeżeli stworzymy skrypt i przypiszemy mu typ
inny niż tekst ukośnik JavaScript, czyli na przykład tekst, ukośnik x template,
to jest dowolna nazwa, to przeglądarka wczytując tą stronę napotka taki
skrypt i uzna, że nie rozumie tego typu i nie będzie próbowała zczytać tego
co jest w środku i zinterpretować jako kody JavaScript. Stąd nie pokaże nam błędu
i możemy sobie wstawić taką templatkaę w to miejsce, czyli normalnie
tutaj mogę tworzyć kod HTML. Przeglądarka taki skrypt wstawi. Można
się do niego potem odwołać po identyfikatorze, co teraz będziemy chcieli zrobić, czyli dodać
ten identyfikator. Napiszemy app template i można za pomocą innerHTML zczytać
ten tekst i to dokładnie zrobi Vue. Wystarczy, że tutaj gdzie mamy template, podamy
identyfikator tej templatki app template. W ten sposób. Zobaczysz,
że Vue również zadziała to poprawnie i tak też się stało. Natomiast,
żeby to wszystko mogło działać, oczywiście musimy mieć tą pełną wersję Vue, która zawiera w
sobie również kompilator szablonów. Okej, zatem widzisz,
że w ten sposób można trochę wygodniej sobie tworzyć te templatki niż wpisywać je tutaj, ale
jeszcze jedna rzecz, którą chciałbym ci pokazać na koniec. Zauważ, że tego app nie
wstawiliśmy do template i dlatego to nie jest kontrolowane przez Vue i teraz pytanie,
co by było gdybyś chciał sobie tutaj dodać jeszcze jedną rzecz. Na przykład H2 Hello, do takiej
templatki. Nie ważne czy tutaj czy zrobilibyśmy to w tym miejscu. Vue pokaże nam pewne
ostrzeżenie. Jak widzisz, tutaj jest napisane, że możemy mieć
tylko 1 root element. To jest bardzo ważne, jeszcze ci o tym w tym kursie nie mówiłem.
Zawsze w naszej aplikacji w naszej templatce może być tylko jeden główny element. Do
tej pory wszystko działało nam poprawnie, bo mieliśmy jeden element. Był to właśnie ten
element app i mogliśmy tutaj dodawać sobie na przykład H1
i paragraf i było wszystko w porządku. Natomiast jeżeli robimy to w ten sposób i później
też będziemy to robić komponentach, to musimy mieć jeden element
główny, a tutaj są dwa elementy. Stąd wystarczy je opleść nawet takim
zwykłym div'em i z punktu widzenia Vue wszystko już będzie w porządku. Wszystko
nam zadziała. Natomiast w tym przypadku może lepiej po prostu cały
ten div, które tutaj mieliśmy wstawić w to miejsce, a te
dwie rzeczy wstawimy tutaj po prostu do środka, okej i pozostawię to w takiej
oto formie. Natomiast teraz będziemy to musieli montować czy w zasadzie wstawiać
do elementu container, który jest nadrzędny,
tutaj i co ważne teraz nasze v-cloak zadziała,
chociaż w zasadzie nie jest potrzebne, bo to i tak nigdzie nie jest widoczne na stronie, do
momentu aż Vue sobie nie weźmie tego kodu HTML i nie wstawi, ale zobaczysz, że teraz
będzie wszystko działać w porządku. To zatem tym tyle w tej lekcji. Zapamiętaj,
że możesz opóźnić wczytywanie się tej aplikacji czy w zasadzie montowanie jej do strony.
Gdybyś na przykład wcześniej chciał pobrać jakieś dane Ajaxem i kiedy je będziesz miał,
dopiero wtedy chcesz uruchomić aplikację. Można to zrobić w ten sposób, czyli za
pomocą vm mount. Jeżeli tutaj podasz selektor, będzie to działać tak
samo jak tutaj podawaliśmy el. Natomiast jeżeli go nie podasz, to wtedy
musisz podać template w taki sposób lub wpisać ją bezpośrednio
tak jak zrobiliśmy to tutaj i później możesz ten element za pomocą
vm dolar el wstawić w dowolne miejsce na twojej stronie.