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
Kiedy z góry wiesz jakie będą style dla elementu, najlepiej
jest mu przypisywać klasy CSS a nie modyfikować styli na nim bezpośrednio.
Czyli to co widziałeś lekcji poprzedniej. Możemy dodać klasę, a w arkuszu CSS
definiujemy, co ma się dziać z elementem, jak ma wyglądać. Natomiast czasami
wolimy, czy potrzebujemy zmodyfikować style bezpośrednio
i to będę chciał ci pokazać w tej lekcji. Czyli atrybut style dodawany do elementów.
Mamy tutaj taki oto obrazek i chciałbym zrobić sobie taki mini przykład,
że jeżeli kółkiem myszy będziemy kręcić na tym obrazku, to po pierwsze strona się
nie będzie przewijać, czyli zapobiegniemy domyślnej akcji, a po drugie będziemy powiększać
ten element przypisując mu transform scale i właśnie tą skalę
będziemy odpowiednio ustawiać, czyli jest to po prostu zapisz CSS3. Niemożliwe
tutaj do wykonania za pomocą klas, bo ja będę chciał dynamicznie tą skalę zmieniać, a
więc nie mogę jej za zadefiniować wcześniej i pokażę ci teraz jak możemy
to zrobić. Mamy taką aplikację, którą już tutaj po części przygotowałem,
mamy ten oto obrazek i chciałbym do niego po pierwsze przypisać zdarzenie will. Jest
takie zdarzenie kiedy kręcimy kółkiem i możemy go przypisać w
ten sposób will i następnie zrobimy
sobie prevent, bo chcę ci pokazać, co nam to da. Jeżeli teraz kręcę
kółkiem, na tym elemencie zauważ, że strona się nie przewija, obok tak, a na kółku nie,
czyli zapobiegłem domyślnej akcji przeglądarki, ale dodatkowo chciałem wtedy
wywołać metodę, która się nazywa zoom i będziemy chcieli ją sobie
tutaj dodać, okej. Do
tego będziemy potrzebowali właściwości level, czyli wartość tego powiększenia
na początek ustawimy to na 1 i tutaj jeszcze w
computed będę chciał zwracać style dla tego oto elementu, więc chciałbym mu zbindować
atrybut style, czyli w lekcji poprzedniej widziałeś jak robiliśmy class. Natomiast
tutaj możemy zrobić style. Podobnie v-bind dwukropek style
też by zadziałało, ale w tym skrócie moim zdaniem wygląda
to czytelniej, czyli dwukropek style. Chcemy zbindować. No i tutaj możemy podawać
to podobny sposób jak w przypadku klas, czyli mógłbym tutaj napisać jaki styl,
na przykład font size, a tutaj jaka ma być jego wartość. W przypadku klasy tutaj
był warunek czy ona ma być dodana. W przypadku styli tutaj będzie wartość.
Czyli jeżeli bym tutaj podał powiedzmy font size,
to musiałbym coś takiego mieć w computed property lub type of data. Mogę
podać literalnie oczywiście, w ten sposób też będzie to działać
poprawnie. Mogę podać 12 plus px,
też będzie działać. Mogę tutaj podać wartość font, font
size to byłoby tak jak mówiłem w computed lub w data i do tego dołączyć piksele,
dowolne wyrażenia tutaj działają, ale ja będę chciał ten obiekt, który jest tym
miejscu zwrócić z computed property, dlatego napiszemy tutaj img
style i dodamy sobie taki computed, który będzie
nam to zwracać i teraz
ja będę chciał przypisać style transform. W ten
sposób, czyli widzisz, że zwracam obiekt, w zasadzie jeszcze tego nie zrobiłem,
tutaj dopiero będzie return, okej i style to będzie transform. To
jest dokładnie ten obiekt, który mogliśmy tutaj wpisać literalnie i teraz jaka będzie wartość. Ja
będę chciał tutaj ten level zinterpolować, więc korzystam z zapisu ES6,
bo będzie to prostsze i będę musiał za pomocą plusa dodawać. Zróbmy to w ten sposób, scale
i wiemy, że w CSS wtedy można podać na przykład scale 1, więc tą jedynkę ja tutaj
po prostu chcę zinterpolować. W EcmaScript6 przy takich backtick'ach można
to zrobić w ten sposób, this level, bo oczywiście poprzez this musimy się z tego odwoływać
i taki obiekt będzie ustawiony. No i ważne jest to, że przy kolejnych rerenderingach,
jeżeli level się nie zmieni to ta computed property nie będzie musiała być
wyliczana od nowa, więc tutaj nic się będzie zmieniać. O to już Vue zadba, ale jeżeli zmienimy
level to wtedy ta computed property będzie musiała się zmienić
i style również się zmienią, więc zobaczymy jak by to mogło wyglądać gdybyśmy
to zmodyfikowali w tym miejscu. Będę te wartości dodawał i można je dodawać
jak tutaj dymek pokazuje na przykład co 5 czy co 10, ale
może dodajmy sobie tutaj co jedno. Jeżeli będę zmieniał level tego powiększenia.
Zauważ, że na stronie to się zmienia. Dodałem overflow hidden do tego rodzica,
żeby ten cały obrazek nie wypływał na zewnątrz, tylko żeby tutaj się
powiększał i teraz będę chciał zrobić tak, że jak będziemy kręcić kółkiem to
będę chciał po prostu zmieniać level o wartości jednej dziesiątej i
to zrobimy właśnie w zoom, bo przypisaliśmy na kręcanie kółkiem właśnie
metodę zoom i tutaj będziemy musieli przechwycić event, który automatycznie tutaj
zostanie przekazany i będę chciał w tym evencie sobie sprawdzić
coś takiego. Jeżeli byś zrobił jego console.log to zobaczyłbyś dlaczego korzystam
z takich właściwości, ale zrobimy sobie If event delta y
większe od zera. To oznacza, że kręcimy kółkiem w dół. Czyli
wtedy będę chciał po prostu powiększać ten element, więc this level plus
równa się 0, 1, będziemy to zwiększać. Sprawdźmy czy to działa. Jak
widzisz, tak. Natomiast jeżeli będę kręcił w drugą stronę, to delta będzie mniejsza od
zera i wtedy będę chciał tę wartość zmniejszać, czyli w przeciwnym wypadku this
level minus równa się 0 1. Tylko problem
jest taki, że zjedziemy do wartości poniżej jedynki, więc powiększam, zmniejszam,
ale możemy zjechać poniżej jedynki i to nam będzie generował problem,
więc tutaj trzeba jeszcze zrobić jedno sprawdzenie, if this
level większa od 1, to tylko wtedy chcemy to zmniejszać. Jeżeli
już dojdziemy do takiej wartości 1, to nie chcemy tutaj robić
nic, więc nie ma tutaj wydaje mi się nic skomplikowanego. Sprawdźmy jak to będzie działać. Kręcę
w jedną stronę, powiększam, kręcę w drugą, zmniejszam, aż do wartości
1 i tutaj super istotne jest to żeby sobie zerknąć co tak naprawdę się dzieje. Style,
które zdefiniowaliśmy w computed property po prostu są tutaj przypisywane, czyli transform
scale 3.1, kręcę, to się zmienia. Jak
zatem widzisz, znowu działa to w sposób reaktywny, czyli tutaj powiedzieliśmy jakie
mają być style. W computed property je wyliczamy, a zmieniamy je za
pomocą zdarzenia will i super, to wszystko już
działa. Co jeszcze jest ważne. Podobnie jak w przypadku klas, gdybyśmy
tutaj mieli atrybut style przypisany z naszymi stylami to będzie wszystko połączone
w jedno i będzie działać poprawnie. Druga ważna rzecz, tutaj też można podawać
zapis tablicowy, gdzie może być więcej takich obiektów. Bo może byśmy te style
w jaki sposób importowali, szczególnie w EcmaScript6, gdzie możemy robić importy i może
mielibyśmy większy, wiele takich obiektów. To warto wiedzieć, że można tutaj podać
to w formie tablicy, gdzie będą te obiekty później połączone. Okej,
no i ostatnia rzecz, o której warto wiedzieć to to, że Vue dodaje vendor prefiksy, czyli
jeżeli tutaj raz jeszcze byśmy przeszli, widzisz, że zostało tutaj dodane transform.
Natomiast w starszych przeglądarkach mogą być tutaj dodane webkit transform czy ms transform.
Ważne jest to, że Vue zadba o to za nas, więc wystarczy, że podamy
poprawne oficjalny zapis taki jak transform, bez żadnego vendor
prefiks'a. No i jak widzisz ta aplikacja, bardzo prosta do zrobienia
z użyciem Vue.js a bardzo efektowna.