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
Kluczowym do zrozumienia tego, w jaki sposób działa Vue jest zrozumienie
jak w języku JavaScript działają gettery i settery. Bardziej nas
będą interesować te drugie i co ważne nie jest to żadna nowość dostępna na przykład w EcmaScript6
jest to coś co od ES5 już z nami jest. Dlatego Vue
wspiera również przeglądarki, które wspierają ES5, czyli innymi
słowy Vue nie działa w przeglądarkach, które nie działają z getterami, setterami,
bo jest to kluczowe do działania właśnie tego framework'a. Teraz ci będę chciał pokazać
o co chodzi, bo być może się zastanawiałeś skąd Vue wie, że zmieniliśmy jakieś
dane. Jeżeli na przykład w metodzie poprzez this kropka name zmieniliśmy name
to wtedy Vue oczywiście zmienia te dane, ale wie, że ma wyrenderować
widok od nowa. Wtedy oczywiście uruchamia się cała analiza wirtualnego
DOM'u, które elementy zaktualizować na stronie a które nie. Natomiast sam
fakt, że Vue o tym wie jest intrygujący. Oczywiście nie tylko
poprzez this kropka mogliśmy to zmieniać, bo możemy również w tym panelu Vue,
jeżeli się odwołamy tutaj do vn0 to jest dokładnie to samo czy
gdybyśmy wywołali new vue,zapisali sobie w zmiennej, ale generalnie
chodzi o to, że wszystko co zapiszemy w data jest w jakiś magiczny sposób proksowane
na główną instancje i kiedy tam coś zmienimy to Vue o tym wie, więc
teraz chcę ci pokazać w jaki sposób działają gettery i settery w języku JavaScript. W sposób
niezależny od Vue. Mamy tutaj ten kod Vue, bo on nam się przyda dla
porównań, ale to co za moment napisze nie ma nic wspólnego z jakimkolwiek framework'iem,
więc wyobraź sobie, że stworzymy taki obiekt, obj
i tutaj też będę miał first name i last name, w ten
sposób dodane i powiedzmy, że chciałbym sobie dodać taką
wyliczoną właściwość jak tutaj computed, która się będzie nazywała full name. Normalnie
w takim obiekcie musiałbym to dodać jako funkcję a co za tym idzie wywoływał
bym to jaką funkcję, ale okazuje się, że w języku JavaScript już od EcmaScript5,
czyli od bardzo dawna, dostępne są gettery. Getter tworzymy
pisząc słowo kluczowe get i następnie nazwa takiego gettera, czyli
full name z nawiasami okrągłymi, czyli wygląda to jak funkcja i
jest to bardzo podobne do zapisu takiego, który w EcmaScript6 jest
dostępne i to tworzy po prostu właściwość, pod którą jest funkcja, natomiast tutaj
to get jest bardzo ważne i stąd możemy sobie zwrócić coś takiego
jak mamy tutaj. Okej i
pytanie teraz jak się wywołuje taki getter, odświeżmy. Ten
obiekt oczywiście w przeglądarce będzie dostępny, bo tutaj jest globalny, więc odwołamy się do
obj i mamy first name i last name, ale odwołajmy się do
full name. Nie wywołuje tego jako metody tylko normalnie object
full name i zostało mi tutaj to wszystko poprawnie zwrócone, czyli działa to bardzo
podobnie jak wyliczone właściwości w Vue, ale nie to jest tutaj najważniejsze.
Nie to porównanie. Ważniejszy dla nas będzie setter za moment. Natomiast co ciekawe,
gdybyśmy sprawdzili type of na takim obiekcie typeof obj.fullName
czy to jest funkcja, bo tak by to wyglądało. Okazuje się, że nie, że
jest to string, czyli z zewnątrz nie widzimy, że jest to getter. Natomiast dla
nas ważniejszy będzie setter i teraz chcę utworzyć setter. Piszemy set full
name i tutaj będzie przyjmowana wartość. Zawsze tylko jeden parametr,
zaraz ci powiem dlaczego. Kiedy się wywołuje setter, mógłbyś pomyśleć. Otóż
wtedy, kiedy odwołaj się do takiej właściwości full
name i napiszę tutaj równa się i podstawie jakąś wartość. Ta
wartość, którą tutaj przypiszę z prawej strony wpadnie do tej funkcji pod value, co
ja z nią zrobię to już zależy ode mnie, więc będę chciał tę wartość
rozbić sobie na spacji i przypisać do first name i last name, czyli
zrobimy to na takiej zasadzie. Napiszemy sobie na przykład parts
równa się value.split, czyli na stringu mogę ten string rozbić i stworzyć z niego
tablicę i następnie do this first name przypisze sobie parts
0, czyli pierwszy element tablicy this lat name to będzie parts
1, czyli drugi element tablicy. Okej, odświeżę i spróbujemy
to zrobić, więc jeszcze raz. Jeżeli pobieramy właściwość, wywołuje się getter, jeżeli
ją przypisuje to wywoła nam się setter. Napiszmy sobie tutaj coś takiego,
okej i teraz kiedy będę chciał ją pobrać, to te
dane wewnątrz są już zmienione i dokładnie w taki sposób działa Vue, czyli
jeżeli ktoś przypisuje jakąś wartość, to Vue może na to zareagować, czyli
ja w tym miejscu mógłbym sobie zrobić coś takiego, rerenderuje
widok i dzięki temu kiedy ktoś coś zmieni w jednej z właściwości
to ja mogę zareagować jakąś funkcją, która rerenderuje widok, czyli
już widzisz skąd Vue wie kiedy ktoś jakieś dane zmienił.
Kiedy my te dane zmieniamy Vue może przeanalizować czy powinno zmienić widok
na stronie. Mógłbyś natomiast zapytać jak to się dzieje, że te dane dajemy
tutaj w data. Podobnie na przykład computed tutaj i metody w methods. Jak
Vue sprawia, że one są dostępne później na this, czyli na tej głównej instancji.
No i to wcale nie jest takie skomplikowane. Wyobraź sobie, że stworzylibyśmy sobie
sami taki framework Vue, no więc pewnie mielibyśmy funkcję, która by się nazywała
Vue, przyjmowała by jakiś konflikt, czyli dokładnie ten obiekt, który tutaj jest przekazywany.
Wewnątrz jest data i potem data moglibyśmy iterować na przykład pętlą
for in, czyli var key in config.data
i moglibyśmy ustawić sobie taki getter, bo jeżeli
tworzymy literalny taki obiekt to gettery i settery robimy w ten sposób, ale możemy również
je dodać inaczej, mianowicie pisząc object define
property i mówimy na którym obiekcie chcemy ustalić właściwość,
this to byłby ten nasz obiekt, który nas interesuje, nazwa
właściwości byłaby pod key, a trzeci jest to obiekt tak zwany property descriptor,
w którym podalibyśmy get i byłaby to funkcja jakaś oraz
set i też byłaby to jakaś funkcja. W ten sposób wszystko
to zostałoby dodane do tego config'a pod kluczem data. Sproksowalibyśmy
bezpośrednio na główny obiekt i byłoby dostępne tam za pomocą takich
getterów pod takimi samymi nazwami jak tutaj wewnątrz data. Oczywiście Vue robi to w
trochę bardziej zaawansowany sposób, ale ogólna idea właśnie tak wygląda,
czyli jest to najważniejsze dla tego framework'a żeby przeglądarka wspierała po prostu
gettery i settery, bo wtedy Vue może wiedzieć, że coś się zmieniło i uruchomić
cały proces analizowania wirtualnego DOM'u czy coś powinno na stronie
być zmienione czy nie. To za ten tyle w tej lekcji. Jeżeli nie wiedziałeś jak działają
gettery i settery to już widzisz, że coś takiego w języku JavaScript od dawna jest dostępne i
twórca Vue świetnie to wykorzystał. Natomiast w kolejnej lekcji przyjrzymy
się jeszcze bliżej samej instancji, czyli temu co jest zwracane z wywołania
new vue.