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 rzucimy jeszcze okiem na to jak możemy pracować ze stylami w tych
jednoplikowych komponentach. Jestem w katalogu 53 i uruchomię sobie
tutaj serwer developmencki, w ten sposób, okej. Za moment
się to uruchomi i będziemy mogli odświeżyć w przeglądarce. Mamy przykład z lekcji poprzedniej. Natomiast
będę chciał ci teraz pokazać jedną fajną rzecz, oprócz tego, że tutaj w
tym index podpięliśmy sobie normalnie style. Oczywiście, możemy to robić, możemy
je stawiać również w ten sposób, to fajne jest to, że możemy w każdym z tych plików pracować
jeszcze na stylach i wyobraźmy sobie, że w tym komponencie counter, chciałbym
do tego przycisku przypisać sobie większy font-size, więc ja mu tutaj dodam klasę
chociaż on już ma pewne klasy, ale dodam ją, bo chcę żeby była to nowa
klasa. Napiszemy btn counter i tutaj możesz sobie dodać
osobno coś takiego, style i możemy się odwołać
do btn counter i powiedzmy,
że chciałbym tutaj przypisać wysokość na przykład na dwa i pół
rem i padding na przykład na 0 i 30 pikseli
i powiedzy, że jeszcze font-size sobie zmienimy na 24
piksele. Kiedy ja to zapiszę, to tutaj automatycznie zostanie za moment wstrzyknięte. Poczekamy
chwilę, powinno się to odświeżyć. Jeżeli tak się nie dzieje, okej. Nie udało się, to
odświeżamy sami. Czasami się to nie odświeża, ale generalnie powinno i jak
widzisz ten przycisk ma już takie style. Pytanie co się dzieje, jak to wszystko działa.
Otóż webpack-dev-server tak naprawdę za pomocą css-loadera
i style-loader'a zbiera wszystkie te style i wstawiaja je tutaj wstrzykując je tutaj. Wstrzykując je
z JavaScript'u, czyli w produkcyjnej aplikacji to nie jest zbyt dobre rozwiązanie, ale
ważne jest to, że kiedy wykonamy build'a i pokażę ci to w jednej z kolejnej lekcji, to
wtedy te style zostaną połączone w jeden plik i tutaj wstawione poprzez link, więc
nie będzie żadnego problemu. Tutaj jeszcze są style, które mieliśmy bezpośrednio
w indeksie wstawione. No, ale tak to może wyglądać, więc możemy w ten sposób
sobie zmieniać style, ale jeszcze jedną rzecz ci pokażę, bo stworzyliśmy klasy btn counter
i jeżeli teraz na stronie będą inne elementy z taką klasą, to
te style, które przypisałem do tego jednego przycisku będą dziedziczone wszędzie. Możemy
dodać do tych styli atrybut scoped. Jeżeli to zrobimy
to zobaczysz jaka będzie różnica, po odświeżeniu będzie to wyglądać tak samo, ale teraz te style tutaj
będą wstawione w inny sposób. To będzie ten styl, zobacz mamy
klasy btn counter, czyli element musi mieć taką klasę oraz musi mieć atrybut
data-v i tutaj taki oto hash. Jeżeli taki ma, tylko wtedy style
będą na niego zaaplikowane, nie wystarczy sama klasa. No i pewnie się domyślasz,
że temu elementowi została taka data przypisana, właśnie taki atrybut. Klasa
pozostała oczywiście, ale musi być ta klasa w połączeniu z atrybutem, żeby te style
były przypisane, a więc one są tutaj lokalne wyłącznie dla tych elementów z
tej templatki, więc tak naprawdę jest to świetne rozwiązanie, jeżeli chce
się odwołać do jakiegoś elementu, któremu tutaj dodałem klasę, a nie chcę, żeby ona
gdzieś globalnie mogła wpływać na inne elementy. Co ciekawe,
możesz w każdym komponencie, tak jak tutaj, mieć jakiś swój własny kod, ale
pytanie gdzie podłączyć resztę. Możemy oczywiście podłączyć go tutaj, ale
jeżeli chciałbyś żeby webpack robił to wszystko za ciebie, to możemy to zrobić na przykład w
głównej aplikacji, więc spróbujmy tutaj w src, to będzie przykład
53 src stworzyć katalog css i tam plik na
przykład main.css. W nim wpiszemy sobie coś takiego jak klasa custom, powiedzmy
font-size 18 pikseli, okej. Zmienimy
rozszerzenie, bo tutaj jedno s za dużo, main.css,
mamy taki oto plik, teraz tutaj SRC CSS i
co ja mogę z nim zrobić. Mogę przyjść do głównej naszej aplikacji, tutaj
lub na przykład tutaj, gdzie chcę, ale mogę tutaj gdzie jest ta główna aplikacja
i wystarczy, że w ES6 wykonamy import tych styli i napiszemy import
from po prostu i css main.css, to
nie byłoby poprawne w EcmaScript6, ale webpack za pomocą style-loader'a
będzie to bez problemu wczytać. Zobaczmy, okej,
tutaj jakiś błąd się pojawił, bez from powinno być, import po prostu i
wszystko działa jak należy i nasze style, cały
ten plik został wstrzyknięte gdzieś tutaj. Zobacz klasa custom, a kiedy
będziemy wykonywali build'a tak jak mówiłem, wszystko to zostanie połączone, więc jakiś główny plik
ze stylami możesz zaimportować tutaj, a pozostałe style lokalne
dla komponentów, takich jak są w tym miejscu możesz wpisać sobie tutaj. No
i na koniec chcę ci pokazać jeszcze, że możemy pracować z preprocesorami na przykład Sass.
Wystarczy, że tutaj dodamy atrybut lang i napiszemy scss,
w ten sposób. Zapiszę to wszystko, ale pojawią
nam się pewne błędy. Nie mamy sass-loader'a, musimy sobie go zainstalować, więc
przejdę do terminala, zatrzymam Control C i musimy zrobić npm install
minus d sass-loader i jeszcze będziemy potrzebować
node-sass, bo też nam wyskoczy błąd. Te dwie rzeczy, jeżeli doinstalujemy to są rzeczy
specyficzne dla webpack'a, a nie dla samego Vue CLI, to powinno
nam to wszystko zadziałać, więc poczekajmy sobie chwilę i uruchomię
jeszcze raz npm run dev. Sprawdźmy czy teraz to przejdzie bez błędów. Tak
też się stało, więc odświeżam aplikację i wszystko działa poprawnie, a żeby udowodnić
że Sass tutaj działa, to może zrobimy sobie kolor i skorzystamy z funkcji w Sass, która nam
rozjaśnia kolor czyli lighten i podam sobie
kolor blue i powiedzmy że o 40% chcę go rozjaśnić. Zapisuję
to i zobaczmy czy na tym przycisku coś się zmieni i widać, że kolor rzeczywiście się zmienił, a wstrzyknięte style
gdybyśmy się im przyjrzeli, to jest kolor i tutaj jest jego szesnastkowa wartość,
więc to poprawnie zadziałało i w ten sposób możesz sobie również wpisać kod z użyciem
preprocesora, takiego jak Sass. To zatem tyle w tej lekcji, a
w kilku kolejnych stworzymy swój praktyczny projekt. Będzie on dosyć zaawansowany, dlatego polecam
ci żebyś pisał razem ze mną. Myślę, że bardzo ci się spodoba.