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
Wykonaliśmy ciekawy projekt w trzech ostatnich lekcjach natomiast
nie kończymy jeszcze tematu komponentów. Chciałem po prostu, abyś może się
troszeczkę rozerwał, zrobił coś ciekawszego. Stąd te trzy ostatnie lekcje nie
pod koniec tego działu, ale właśnie w jego środku i teraz chciałbym żebyśmy przyszli
do jeszcze kilku rzeczy związanych z komponentami. Jedną z ciekawych
rzeczy jest to, że możemy warunkowo wybrać jaki komponent załadujemy
i nie mam tutaj na myśli tego, że damy sobie na przykład dwa komponenty i za
pomocą v-if będziemy manipulować tym czy się pojawią czy nie. Ale
mamy specjalny element o nazwie komponent, który będę chciał ci pokazać, natomiast najpierw
zobaczymy co tutaj mamy. Troszeczkę inna strona, niż do tej pory. Mamy
jakąś nawigację, mamy tutaj stopkę, a pomiędzy tym jest sekcja główna. Wygląda
to w ten sposób i chciałem teraz jeszcze zerknąć na to
co mamy niżej. Mamy edu home. To jest komponent nowy, który stworzyłem, bardzo
prosty. Zobacz co tutaj się wydarzy kiedy ja ten komponent osadzę,
okej i zapisuje,
odświeżymy tutaj i jak widzisz mamy coś takiego. Panel administracyjny. Skorzystaj
z nawigacji powyżej, czyli to będzie jakaś strona główna naszej aplikacji
która będzie mieć kilka widoków. Zatem bardzo prosta rzecz, tutaj nie ma żadnej logiki. No
i edu users to są nasi użytkownicy, których mieliśmy, korzystający również
z pojedynczego elementu edu user. Tutaj nie ma w tym momencie nic
nowego. Natomiast chciałbym móc zrobić tak, że po kliknięciu na home
będzie wczytywany ten widok, a po kliknięciu tutaj w użytkownicy będziemy
ładowali widok z users, czyli generalnie będziemy chcieli Home
zamienić na users w ten oto sposób. Oczywiście to
nam nie zadziała, jeszcze dlatego, że tutaj musimy przekazać jak zapewne pamiętasz, users,
okej i
teraz powinno zadziałać. Tak też się dzieje, możemy edytować tych użytkowników i tak
dalej będę chciał to teraz zmienić, więc mamy taki specjalny element,
który się nazywa komponent. W ten oto sposób. Jemu
też możemy przekazywać props, tak samo jak w tym miejscu, chociaż powiem ci szczerze, że w przypadku
korzystania z tego komponentu raczej będziemy troszeczkę robić to inaczej,
czyli users chyba bym nie przekazywał wtedy w tej głównej aplikacji tutaj,
ale zrobiłbym tak, że dokładnie ten komponent edu users
jakoś by sobie pobierał. Miałby je tutaj zapisane w data czy później mógłby je
pobierać Ajax'em. Na razie jednak zostawimy to w ten sposób. Natomiast jest jeden bardzo
ważny atrybut, który przypisujemy do tego komponentu, jest to atrybut is. Tutaj
możemy podać nazwę komponentu jaki chcemy wczytać i jeżeli wpiszę tutaj edu home.
Zobacz, to wczyta nam się właśnie ten pierwszy
komponent. Natomiast jeżeli wpiszę edu users to
wczyta nam się drugi komponent i co ciekawe jak wszystkie atrybuty, możemy
również is zbindować, żeby był dynamiczny i wtedy tutaj ta wartość nie będzie
brana dosłownie bo musiałbym ją wpisać ten sposób, tylko możemy tutaj podać jakąś
właściwość, która się będzie znajdowała w naszej głównej aplikacji. Ja chciałbym ją nazwać
Vue, przejdziemy sobie do tej głównej aplikacji i wiem, że tutaj jest sporo kodu,
ale zobaczysz jeszcze w tym kursie sposoby na to, żeby rozdzielić to
na wiele różnych plików. Tutaj jest nasza główna aplikacja i w data chciałbym dodać coś
takiego jak Vue i domyślnie niech to będzie edu home,
powiedzmy, okej, działa i teraz
wystarczy, że zmienimy Vue, która jest w tym miejscu, co za tym idzie
na tym elemencie komponent tutaj również się to zmieni i
będziemy mogli załadować inny widok w sposób dynamiczny, więc
tutaj przygotowałem dwa przyciski są to elementy a i po ich kliknięciu
będę chciał właśnie zmienić sobie ten widok, więc przypiszemy zdarzenie click i
od razu zrobię prevent po to, żeby ten hash nie dodawał się do adresu,
czyli zapobiegniemy domyślnej akcji przeglądarki i tutaj można wykonać jakąś metodę
lub wpisać wyrażenie. Ja będę chciał zrobić coś takiego, Vue równa
się i przepisze my tutaj edu home i zrobimy
to samo dla linku, który jest poniżej, okej i
tutaj zrobimy edu users. Powinno
nam to już zadziałać, czyli po kliknięciu w ten przycisk zmieniamy Vue na naszej głównej aplikacji,
bo to w jej templatce teraz jesteśmy, więc kontrolujemy właśnie te właściwości
i ważne żeby tutaj były takie od apostrofy, że ta wartość jest to
string, a nie w żaden sposób inne wyliczona wartość, okej. No
i teraz jeżeli kliknę tutaj odśwież. Jak widzisz, wygląda to tak samo, ale jeżeli
kliknę użytkownicy to będziemy mogli zmienić widok w taki
oto dynamiczny sposób, co ważne, takie widoki będzie również można zmieniać za
pomocą Vue Router, który ci jeszcze w tym kursie pokaże natomiast Vue Roter jest
taką biblioteką third-party powiedzielibyśmy, czyli osobną
od samego Core Vue, a to co ci teraz pokazuje działa domyślnie właśnie w Vue,
więc taką nawigację możesz bez użycia jakiś dodatkowych pluginów również sobie
zaimplementować z tym, że różnica jest taka od Vue Router, że tutaj nie
zmieniamy po prostu adresu URL, ale komponenty się zmieniają no
i oczywiście gdybyśmy sobie to podejrzeli tutaj przejdziemy do tej
sekcji głównej, to one są w całości usuwane i wstawiane, czyli table jak widzisz
tutaj jest. Jeżeli to podmienimy w całości tutaj table zniknęło i pojawił
się inny element. Tutaj jest tylko taki problem, że user zostało przypisane jako
taki atrybut dlatego że przekazujemy do tego komponentu users,
a jeżeli wczytuje się tutaj edu home, to on nie oczekuje na taki prop, stąd właśnie
prawdopodobnie lepiej byłoby to users zapisać bezpośrednio w komponencie edu
users, ale jak widzisz w ten sposób również zadziała. Mamy natomiast
pewien problem, chociaż czy to jest problem to zależy od konkretnej sytuacji. Jeżeli
przejdziemy do użytkowników, wybiorę tutaj edytuj. Jak widzisz pojawiło
nam się takie oto pole i jeżeli teraz wrócę do home i znowu do użytkowników, to pole
znika, a to nam mówi, że ten komponent został wyrenderowany w całości od nowa. Oczywiście,
gdybym zaktualizował dane to nie ma takiego problemu, że kiedy go wyrenderujemy
od nowa to te dane się tutaj od nowa wczytają, nie, bo te dane są
przechowywane cały czas i oczywiście możemy to podejrzeć w tym miejscu. Na
tym root mamy te dane, jest to ta tablica, więc w tym nie tkwi problem, ale
tkwi w tym, że ten stan komponentu jaki mamy tutaj nie zostaje zachowany
i nie zawsze będziesz chciał żeby był zachowany, ale gdybyś miał taką potrzebę to
możemy oczywiście to zrobić. Wystarczy, że taki komponent
opleciemy tagiem keep-alive, który jest przez Vue domyślnie
dostępny, okej i to oznacza,
że z tamtych komponentów ma być zapisywane, czyli teraz home mamy tutaj,
przechodzę do edycji, wracam do home, wracam do użytkowników
i jak widzisz ten stan tutaj został zachowany. Razem z tym keep-alive
wiążą się jeszcze dwa lifecycle hook'i i pokazywałem
już w tym kursie, że możemy zareagować na przykład kiedy komponent jest tworzony
czy usuwany, więc gdybyśmy przeszli tutaj i będziemy tutaj mówić
o konkretnych komponentach, bo te komponenty są tutaj podmienione,
ale te hook'i musimy przypisać do każdego z nich, jeśli nas to interesuje. Zróbmy
to na komponencie users, być może jeszcze pamiętasz, że mogliśmy
przypisać coś takiego jak na przykład created i to była funkcja.
Ja chciałbym tutaj zrobić console.log po prostu created, ok i następnie
destroyed, to był hook, w którym mówiłem ci, że się wykonuje kiedy
wykonamy this destroy, ale nie tylko, zobaczmy. Musimy
oczywiście otworzyć sobie konsole, nic się nie pojawiło, ale kiedy kliknę
na użytkowników, komponent został utworzony, dlatego jego hook created się wykonał,
ale jeżeli zmienię to na home i nie mielibyśmy
keep-alive, bo to też jest ważne. Gdyby tego keep-alive tutaj nie
było. Jeszcze raz to zróbmy, to widzimy destroyed, czyli
ten komponent jest niszczony. Natomiast jeżeli jest keep-alive, to nie jest niszczony, ale
czasami chcielibyśmy wiedzieć kiedy on został aktywowany z różnych powodów chcielibyśmy
wiedzieć, że do niego wróciliśmy i dlatego właśnie korzystając z keep-alive
dodatkowe dwa hook'i nam się pojawiają tutaj. Ja
sobie może to skopiuję i pokażę ci to, będzie to hook activated
i drugi to będzie deactivated,
okej więc
teraz jeżeli sobie to odśnieżymy, klikam użytkowników. Mamy i created i activated, teraz mamy deactivated,
a nie destroyed, jak mogłeś zobaczyć i teraz znowu activated, więc w
ten sposób mogę zareagować na to, żeby coś w tym komponencie
zrobić, zmienić czy zaktualizować kiedy on się na stronie pojawia. Jak
zatem widzisz w taki prosty sposób możemy sobie stworzyć dynamiczną aplikację i
jeżeli byś troszeczkę nad tym powiedział, zrobił sobie ciekawą nawigację,
jeśli chodzi o te linki i ciekawe komponenty, a szczególnie kiedy podzielisz je na wiele
plików, żeby się łatwiej z tym pracowało, to naprawdę będzie można tworzyć ciekawe
aplikacje w bardzo prosty sposób. Niemniej jednak do takich już większych
aplikacji możemy wykorzystywać coś takiego jak Vue Routed, który poznasz jeszcze w tym kursie.