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 w jaki sposób możemy nasłuchiwać na zmianę w jakiejś właściwości,
w dowolnej. Natomiast my wykorzystamy taką, która będzie korespondować z v-model. Mamy
taką prostą aplikację. Powiedzmy wyszukiwarki i mamy tutaj pole z placeholder'em
czego się dziś nauczysz i ważne jest to, że v-model kieruje na search, a więc
wiesz, że za każdym razem kiedy na tym polu wywoła się zderzenie input, kiedy tak
naprawdę wciśniemy dowolny klawisz, wpiszemy jakiś znak to search będzie
tutaj uaktualniane i teraz może ja chciałbym o tym wiedzieć. Chciałbym za
każdym razem, kiedy tam się coś zmieni wysłać zapytanie do serwera, żeby przeszukiwać
na przykład kursy na eduweb.pl. No i pytanie w jaki sposób możemy to zrobić, bo
tutaj jeżeli byśmy podejrzeli i mamy search. Zacznę coś wpisywać i
jak widzisz jest to aktualizowane. Jak się o tym dowiedzieć. Możemy
przejść tutaj i rzecz, której ci jeszcze nie pokazywałem w tym obiekcie konfiguracyjnym
można dodać watcher'y, dodajemy taki obiekt watch i następnie
tutaj kluczem będzie nazwa właściwości, którą chcemy obserwować, czyli
search i będzie to funkcja, a ta funkcja, co ważne, otrzyma
poprzednią wartość i nową wartość. Będzie to new value i old value. Możemy je
sobie wyświetlić, żeby sprawdzić
co tak naprawdę pojawi się w konsoli i jak
widzisz wygląda to w ten sposób, new value na przykład jest to Piotr, a poprzednia wartości
jest to taka wartość. Natomiast pojawia nam się tutaj pewien problem,
ale za chwilę go sobie zaadresujemy. W każdym razie skoro możemy tutaj
już nasłuchiwać i mamy nową wartość i poprzednią. Poprzednia nie jest mi potrzebna,
bo chciałbym zrobić następującą rzecz, this query server. Chcę
wywołać metodę przekazując jej ten właśnie nową wartość
i tutaj wysłali byśmy zapytanie Ajax, dodajmy sobie query
server, jako funkcję, ona otrzyma value. Oczywiście co
ważne tutaj nie musielibyśmy tej metody wywoływać w ten, bo moglibyśmy w
tej metodzie, nie musielibyśmy jej tego przekazywać po prostu, bo w tej metodzie mógłbym się
odwalić this search i miałbym to samo, ale nic nie stoi na przeszkodzie, żeby to po prostu tutaj
przekazać i tutaj zrobiłem powiedzmy coś takiego, console.log
i że wysyłamy zapytanie pod HTTP, powiedzmy server.com
i na przykład search równa
się, no i tutaj żeby być poprawnym, to musielibyśmy zrobić funkcje JavaScript'ową encode URI
Component, żeby wszystkie spacje zamienić na przykład na procent 20 i tak
dalej value. W każdym razie to jest tylko symulacja, nie będziemy tutaj wysyłać Ajax'a. Powiedzmy,
że wyszukuje kursu JavaScript i zobacz jaki jest problem rzeczywiście
wysłali byśmy zapytania, ale ile wysłali byśmy zapytanie jedno drugie
trzecie i tak dalej zablokowali byśmy tak może być może serwer jeżeli więcej osób
korzystało by z tego w ten sposób dlatego tutaj to dodamy sobie jeszcze
debounce, czyli sposób na opóźnienie tego wszystkiego. Nie
jest to już coś co jest związane ściśle z Vue, ale chcę ci to po prostu pokazać, dlatego
że samo search czy w zasadzie watch już ci pokazałem. Jeżeli chcesz nasłuchiwać
na zmiany w jakiejkolwiek właściwości ona nie musi mieć nic wspólnego z
samym v-model. Możesz to robić za pomocą watcher'ów. Natomiast skoro
to mam już zamknięte, to pokażę ci jak wykorzystać tak zwany debounce i znowu
żeby nie pisać własnego kodu chociaż nie byłby on zbyt długi mam podpiętą bibliotekę lodash. Dla
tej jednej funkcji bym jej nie podpinał, ale tutaj dla celów
prezentacyjnych możemy to zrobić. Ta biblioteka zawiera w sobie taką metodę jak debounce
i ona polega na tym, że jej przekazujemy funkcje i czas po
jakim ta funkcja ma się wykonać i ona nam zwraca nową funkcję i tą nową
funkcję, jak wykonujemy, zbyt często, a podaliśmy, że ma się na przykład ma się wykonać
po 200 milisekundach, to ona się nie wykona na przykład 10 razy, jeżeli ją wywołamy
w tym czasie. Wykona się tylko raz. Być może z tym miałeś już do czynienia bardzo
przydatne właśnie w takich sytuacjach, natomiast jeżeli to tutaj wywołujemy this query server
to właśnie chciałbym tutaj wywołując tę funkcję jak widzisz bardzo wiele razy, kiedy
wciśniemy jakiś klawisz. Chciałbym, żeby ona się wykonywała maksymalnie raz na
pół sekundy, dlatego całą tą funkcję, którą przypisujemy do tej metody przepuścimy
właśnie przez underscore, czyli lodash debounce. Tutaj
mówimy jaką funkcję ma właśnie w ten sposób odbijać, można powiedzieć,
a tutaj jaki czas i zadziała to tak jak mówiłem debounce
otrzymało naszą funkcję i czas i zwracam zupełnie nową funkcję pod query
server i w tym miejscu kiedy tą nową funkcję wywołujemy, to tak naprawdę
ona dba o to, żeby ta funkcja, która jest gdzieś wewnątrz nie była wykonywana częściej
niż co 500 milisekund. Sprawdźmy jak to teraz zadziała,
jeżeli będę pisał szybko. Dopiero jak skończyłem
po 500 milisekundach to się wykonało. Jeżeli ktoś pisze wolniej, to oczywiście wyśle
kilka takich zapytań. Jak
widzisz tak by to wyglądało, ten czas można dostosować. Niemniej jednak teraz będzie
to dużo bardziej poprawne rozwiązanie. Poza tym tyle zobaczyłeś, jak
prosto można nasłuchiwać na zmiany właśnie między innymi po to, żeby wykonywać asynchroniczne
akcje. Kiedy coś się zmieni możemy na przykład odpytać serwer. On nam
może zwrócić nowe dane, wszystko co do tej pory już widziałeś. Znasz
tutaj gdybyśmy jakiś Ajax wysłali to moglibyśmy potem napisać na przykład this
data równa się jakieś nowe dane. Tutaj mielibyśmy data i
wiesz o tym, że jeżeli mielibyśmy to na stronie wyświetlone z użyciem przykład
pętli, wszystko zostało by ładnie zaktualizowane, więc w ten sposób na przykład jakie kursy
byśmy pobrali i na stronie moglibyśmy to wyświetlić.