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 jak możemy filtrować dane, chociaż to nie będzie miał
nic wspólnego z filtrami, które widziałeś w lekcji poprzedniej. Chodzi mi o taką sytuację
w której będę mógł tutaj wpisać jakiś tekst i cała tabela zostanie
w taki sposób oflitrowana że zostaną tylko te wiersze
w których nazwisko się będzie tutaj zgadzało z tym co wpiszę. Chcę ci
pokazać jak to zrobić sposób bardzo prosty i bardzo wydajny. Mamy tutaj takie oto pole.
Więc najlepiej byłoby do tego pola dodać atrybut v-model
i to będziemy chcieli zrobić w tym oto miejscu, czyli wiemy że Two Way Data Binding
będzie ustawione nazwijmy sobie to query. Jeżeli zrobimy coś takiego to
musimy to query mieć dodane w naszym obiekcie data i będzie
to pusta wartość, więc taka też zostanie ustawiona na tym polu domyślnie, po wczytaniu się
tej strony. Na szybko sobie tylko zerknijmy czy to działa. Jeżeli coś wpisuje, widzimy,
że tak. No i teraz zauważ co my robimy w tym miejscu bo to będzie
najważniejszy moment tutaj, iterujemy sobie po tablicy
users. No właśnie, ta tablica w zasadzie się nie zmienia,
ale gdybyśmy sobie dodali computed property którą nazwiemy filtered
i po niej będziemy chcieli iterować,
to ciekawe, bo to jest możliwe, to będziemy w niej mogli odfiltrować sobie
pewne dane, więc doajmy sobie computed filtered. Będzie
to funkcja. Tylko skoro my chcemy iterować po czymś się to
znaczy, że ta funkcja musi zwrócić tablice. No właśnie ja będę chciał
zwrócić nową tablicę, a można to zrobić wykonując
metodę filter na dowolnej tablicy, więc this users, daj
mi dostęp do tej tablicy i tablice w języku JavaScript. To nie ma nic wspólnego z
samym Vue, po prostu w języku JavaScript mają metodę filter i ta
metoda przyjmuje funkcję. Ja tutaj pozwolę sobie zapisać funkcję strzałkową
w EcmaScript6, bo po prostu jest to prostsze. Ta funkcja otrzyma
jeden konkretny element tej tablicy, czyli user to będzie parametr i z niej chcę zwrócić
true lub false. Jeżeli zwrócimy true to dany element pojawi się w nowej
tablicy, która tu będzie zwrócona i to po niej będziemy iterować. Jeżeli
zwrócimy false to nie. Ja chcę się tutaj odwołać do this query,
czyli chcę zapytać czy user i następnie last name index
of this query. Czy to się tam znajduje. Po
prostu co wpisaliśmy i czy to nie jest równe minus 1, w
ten sposób możemy to sprawdzić lub możemy to zrobić również w nowym zapisie EcmaScript6.
Tylko pamiętaj, że to musi być wspierane w danej przeglądarce, includes,
jeżeli ten string zawiera w sobie this query,
to tylko wtedy chcemy zwrócić taki element. Zobacz
w jaki sposób będzie to działać teraz. Napiszemy sobie Kowalski, jak
widać to jeszcze nie działa. Teraz nam działa poprawnie, my powinniśmy jeszcze wziąć pod uwagę wielkie
i małe litery. Jeżeli piszę z małych to to przestaje działać, zatem
tutaj last name zróbmy sobie jeszcze tu lowercase, okej i
teraz jeśli napiszę Kowalski. Zgadza się. Jeżeli
samo k, to widzimy, że te nazwiska, które zawierają w sobie k
się zgadzają. Oczywiście tutaj filtrowanie mogłoby się odbywać na zasadzie wyrażeń
regularnych, żeby to k musiało być na początku i tak dalej. To nie ma znaczenia dla naszego
przykładu chodziło mi tylko o pokazanie jak filtrować w tak prosty sposób
można to zrobić i jest jedna tutaj piekielnie ważna rzecz. Jeżeli
zrobimy coś takiego. Został nam tylko jeden element i coś innego
w naszej aplikacji się zmieni że Vue będzie renderować widoki od nowa, to
ono nie zmieni nic w tym widoku, bo pewnie pamiętasz, że computed property
są cache'owane. One nie są od nowa uruchamiane, gdybyśmy tutaj dali
console.log to można byłoby to sprawdzić, bo Vue po prostu wie na czym
bazuje dane computed property, czyli Vue sobie przeanalizowało, że tutaj this
users i z pewną zależnością tej funkcji oraz this query. Zatem
jeżeli users się nie zmieniło. Jeżeli query się nie zmieniło, to
nie będziemy od nowa renderować tego widoku. Natomiast gdybyśmy do users dodali
sobie kolejny element i to taki, który miałby nazwisko na k czy
na przykład ko, żeby to się wszystko zgadzało, to powinno to zostać wyświetlone
na stronie, więc jeżeli tutaj byśmy się odwołali do tego. Spróbujmy,
by się upewnić vm0 users push. Dodamy
sobie taki, który ma first name Tomasz
i Last name Kowalczyk
i age powiedzmy 30. Zauważ,
że to się od razu pojawiło na stronie. Od razu zostało to przefiltrowane, więc to jak
najbardziej działa w sposób reaktywny. W taki zatem sposób jak widzisz, możesz
filtrować dane. Mamy pewną oryginalną tablice, ale wyświetlając
ją za pomocą v-for wyświetlamy tą tablice przefiltrowaną,
która znajduje się w computed properties.