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
Rozpoczynamy finalny projekt tym kursie, a będzie to aplikacja slideshow,
czyli taki slider gdzie będziemy przewijać obrazy, taka galeria obrazów
w prawo, w lewo będzie można zmieniać obrazki i w kolejnych lekcjach będziemy ją sukcesywnie
rozbudowywać, natomiast polecam ci rozpocząć razem ze mną w plików źródłowych
z katalogu 54 i tutaj po prostu uruchomiłem npm run dev. To
jest templatka wygenerowane z Vue init webpack. Natomiast usunąłem niepotrzebne
rzeczy, żebyśmy zaczęli od czystej kartki. Ważne, że do pliku index
tutaj wstawiłem już tą naszą strukturę, którą mieliśmy przez cały ten kurs i
tu będzie wstrzykiwana nasza aplikacja, więc to już mamy i teraz
będziemy chcieli pracować sobie na tym wszystkim, ważny jest plik main.js, w którym
na razie nic nie zmieniałem, on include'uje sobie apkę główną i wstrzykuje
to do elementu app na stronie, więc tutaj na razie nic nie będziemy zmieniać. Rozpoczniemy
pisanie naszej aplikacji tutaj w pliku app.vue. Zaczniemy
od stworzenia templatki i następnie skryptu ,którym
będzie nasza logika. W templatce tej głównej chciałbym mieć coś takiego div
app, przy okazji zobacz tutaj działa mi na przykład emmet, to nie działało
kiedy pracowaliśmy wcześniej z komponentami w tym template string'u, więc to kolejny powód
żeby korzystać właśnie z takiego workflow i chciałam zrobić coś takiego, że
tutaj będziemy mieli H1, pokaz zdjęć, a tutaj chciałbym
móc osadzić sobie komponent, który się będzie nazywał slideshow. To
jest nasz komponent, który stworzymy, będziemy go domykać w ten sposób. Ten domykający slash
jest ważny żeby nie było błędu, jeżeli nic nie stawiamy do elementu można go od razu domknąć. Okej,
no to oznacza, że skoro go chcemy domknąć i zasadzie w ogóle tutaj wstawić
to potrzebujemy go sobie zaimportować, więc możemy od razu sobie przygotować
tutaj import, import Slideshow from
i będziemy to chcieli mieć w katalogu components, slideshow.
Okej, żeby to mogło działać to tutaj muszę utworzyć taki
plik, więc zróbmy to od razu, żeby wszystko tutaj było tak jak należy src components
slideshow Vue, znowu tutaj
on będzie miał swoją templatkę, tworzymy to wszystko od zera, tutaj nie
mamy już nic, czyli nie wykorzystujemy komponentów, które stworzyliśmy wcześniej w kursie,
on będzie musiał coś oczywiście eksportować, jakiś
obiekt i ten obiekt wiemy, że to jest to co podawaliśmy zawsze do components, czyli teraz
już nie powinno być błędu, tutaj jest to importowane, ale żeby tutaj jeszcze to
działało, no to musimy tutaj zrobić export default, No i stworzyć
obiekt w ogóle tej głównej aplikacji. Podamy jej name, nie wytłumaczyłem
ci jeszcze o co chodzi z name, to się przydaje w debuggerze, który mamy w przeglądarce, więc
name możemy nazwać po prostu app, od tego name to będzie zależeć, a nie od
tego jak nazwiemy tag, więc to name warto sobie w tych komponentach przypisywać
i następnie components. No i tutaj podajemy,
tak jak wiesz, nazwę tego tagu oraz komponent, który ma być pod
nim. Komponent mamy tutaj w takiej stałej, zaimportowanej. Nazwa
tagu, chcę żeby była taka sama dlatego tutaj po prostu wpiszemy slideshow, ale
już wiesz jak to się rozwija, to jest to samo co slideshow dwukropek
slideshow. Teraz nie powinno być błędu jeżeli byśmy tutaj przeszli. Otworzymy
sobie konsole, zobaczymy Vue, okazuje się, że mamy aplikacje. W środku
mamy slideshow i te nazwy, które są tutaj app oraz slide show, one właśnie nie zależą
od nazwy tagu jaki byśmy wybrali, ale od name, które przypiszemy, więc
tutaj też warto będzie sobie dodać od razu name slideshow. Jeżeli
jest nie podane to nazwa oczywiście tej właściwości tutaj jest brana pod uwagę. Okej,
no i powiem ci że ogólna idea będzie taka, później będziemy pobierać obrazki z serwera,
czyli w ogóle ich list za pomocą Ajax'a, natomiast na razie chciałbym to wstawić
tutaj na sztywno do tego głównego komponentu, więc stworzymy sobie funkcję
data i z niej będziemy chcieli coś zwrócić. Chciałbym
z niej zwracać prop, która będzie się nazywać images i chciałbym,
żeby to była tablica, mam to tutaj w schowku skopiowane, na razie tutaj są trzy obrazki, ale docelowo ich
będzie 10, tylko nie chciałem tutaj zaśmiecać kodu i te images będziemy
z głównej aplikacji chcieli przekazywać do komponentów slideshow, czyli on ma być uniwersalny,
będzie wyświetlał nam cały slideshow, ale musimy mu podać dane, czyli
mamy tutaj taką tablice z obrazkami, oczywiście mogłaby to być tablica
gdzie bezpośrednio byłyby takie stringi, ja zrobiłem obiekty, bo często w podobny
sposób może to być pobrane z Internetu i do tego slideshow będziemy chcieli to przekazywać
jako prop images, czyli zbindujemy, robimy to co do tej pory już w tym
kursie widziałeś i wiemy, że to wpadnie tam do wewnątrz. No więc teraz skupmy
się na tym komponencie slideshow, żeby mógł to wszystko przyjmować, więc
przejdziemy sobie w to miejsce i musimy mu zdefiniować prop, które on przyjmuje. Ja
będę chciał to zrobić razem z walidacją, więc powiem, że on może przyjmować images, ale
żeby to była tablica. Okej, czyli jeżeli przekażemy coś innego to powinien
pokazać się błąd. No i teraz mając tutaj images moglibyśmy
je w jakiś dowolny sposób tutaj wyświetlać. Natomiast ja będę chciał
żebyśmy stworzyli jeszcze jeden komponent, który się będzie nazywał slajd. Tutaj go zaimportujemy, import
slide from. Teraz jesteśmy już w tym katalogu components, bo tutaj
slideshow, więc bezpośrednio z tego katalogu będę sobie chciał zaimportować
slide. No i musimy go utworzyć 54 src
components slide vue. Znowu template. Jak
się to powtórzy kilka razy, to uwierz mi, jest to bardzo intuicyjne fajnie się to tworzy. No
i tutaj będziemy eksportować z kolei ten moduł, bo chciałbym żeby slideshow w sobie mógł
zawierać wiele elementów slide, które przechowują jeden obrazek, export
default name slide, no i tutaj
będą jakieś jego pozostałe rzeczy. Od razu ci powiem, że on jako prop będzie
przyjmował url, więc chcemy to tutaj przekazać. Chciałbym żeby to
było przekazywane jako string, na razie tyle i może tutaj w templatce zrobimy
sobie na początek H1 url,
żebyśmy wiedzieli, że to się może tutaj wyświetlić i z tego naszego slideshow będziemy
to mogli tam przekazać. Okej, może skupmy się teraz na tej templatce slideshow,
która jest w tym miejscu, ja wkleję gotowy fragment kodu, okej. Tak
to będzie wyglądać. Zobacz, stworzyłem sobie slides wrapper, tak to wygląda
i będę miał dwa przyciski. Chciałbym, żeby to był przycisk w prawo i w lewo, a
tutaj będą nasze główne zdjęcia, główne slajdy, natomiast do nich potrzebujemy teraz jeszcze
przepisać style, więc stwórzmy sobie tutaj style,
może od razu scope, żeby one były jak już wiesz, przypisane bezpośrednio
do tych elementów i wrzucę sobie tutaj troszeczkę styli, okej. Po
prostu, żeby te przyciski były w odpowiednich miejscach, nic tutaj nie ma skomplikowanego i
teraz jeżeli byśmy to odświeżyli, rzeczywiście te przyciski już się pojawiają
tak jak być powinno. Możesz zobaczyć, one tutaj są i zaczyna
to jakoś fajnie wyglądać, do nich będziemy chcieli przypisać zdarzenie kliknięcia, ale to za moment bo
chciałbym się skupić nad tutaj. Tutaj chciałbym wstawiać komponent slide,
który utworzyliśmy, to on będzie odpowiedzialny za wyświetlenie jednego pojedynczego zdjęcia do
którego URL tutaj otrzymał, więc żeby go tutaj wstawić,
zaimportowaliśmy go, musimy dodać jeszcze jako components i wpiszemy
tutaj slide, czyli pod takim tag'iem on tutaj będzie dostępny, slide
domknę go od razu, bo do niego nie będziemy przekazywać żadnej treści html'owej.
Natomiast on oczekuje tak jak to wymyśliłem, jako że otrzyma
URL, okej. No i teraz zaczynamy myśleć
jak to zrobić. Do tego komponentu dostaliśmy całą tablicę, w której
są różne zdjęcia. Moglibyśmy tutaj te slajdy wyświetlić za pomocą v-for
i byłoby i wtedy więcej natomiast ja nie potrzebuję tego robić, bo
my będziemy cały czas tylko jeden widoczny slajd którego URL będziemy zmieniać, ale
jak mu tutaj przekazać ten jeden URL. Otóż, chciałbym zrobić taki computed
prop. Będzie się nazywał active url, więc
tutaj zrobimy sobie computed active url
i wiemy, że to jest funkcja w zapisie ES6, mogę to zrobić w ten sposób i
będę chciał zwrócić this images, czyli
mamy tablicę i teraz jaki tutaj podać indeks, bo będę chciał zwrócić indeks
i następnie URL, bo przypominam ci jak to wygląda. Jeden
element z tablicy to będzie taki obiekt, więc kropka URL da mi ten adres i teraz
chciałbym tutaj sobie zapisać w data, to
musi zwracać obiekt, pamiętaj proszę chciałbym tutaj zapisać
sobie active i domyślnie
będzie to zero, czyli pierwszy element tablicy, tutaj będę chciał zwracać this active, ten active
będziemy mogli później zmieniać. Zobaczysz w jaki sposób będzie to reaktywne,
okej. Zbindujmy to teraz, żeby to wszystko mogło działać, bo skoro
już wiemy, że mamy computed property o nazwie active url to teraz
będziemy musieli to tutaj zbindować, URL, bo tak nazywaliśmy prop, który będzie
tam przyjmowany i active url, czyli do tego slide'a pod
prop url powinien wpaść taki adres, który tutaj wyświetlimy. Zobaczmy
czy nam to w ogóle zadziała, H1 w ogóle gdzieś tutaj powinna się pojawić slideshow
i widzimy, że coś jest nie tak mamy jakiś błąd, okej. Wygląda
na to, że tablica, którą mamy tutaj w slideshow nie
została tutaj poprawnie przekazana, czyli widzimy, że robimy prop images
to jest coś czego oczekujemy, więc this images powinno tutaj być. Widzę
gdzie jest błąd, teraz go zauważyłem, mamy tutaj s, jak widzisz jest to super istotne i
tak a propos nie została przyjęta. Teraz jest w porządku
i wreszcie do naszego na samym dole komponentu, który jest tutaj slide
zostało dobrze dostarczone, taki adres został
dostarczony, więc jest wszystko w porządku, więc możemy sobie osadzić zdjęcie, które będzie
nam wyświetlać właśnie obrazek, który znajduje się pod takim adresem,
zatem zróbmy sobie to w tym miejscu. Zamiast wyświetlać tutaj taki url, to ja
wstawię taki fragment kodu, więc mamy obrazek i skoro wiemy,
że tutaj url jest przekazywany to zbindujmy sobie atrybut
src tego obrazka na wartość url i to będzie templatka po
odświeżeniu, wow, wreszcie zaczęło to działać poprawnie. Super to wygląda
i teraz będziemy chcieli zmieniać tylko ten active url. Jeżeli go zmienimy to
wszystko powinno być propagowane na dół, więc spróbujmy, wiem
że może się to wydawać zagmatwane, ale proszę na spokojnie również może zapauzuj
i zaglądnij do tego kodu. Spróbuj to napisać razem ze mną. Jeżeli na slideshow tutaj
zmienimy sobie active to zmieniają się obrazki. Mógłbyś
pomyśleć, wow, jakim cudem to działa. Zmieniamy active na slideshow. Jeżeli
zmieni się active, to zmienia się też computed property, które na nim bazuje i
z tablicy zwraca kolejny element. Jeżeli się zmieni active url computed,
to zmieni się również tutaj w tym prop, który jest przekazany do slide, a skoro
się zmieni slide, to musi się zmienić również w tym miejscu, no i w ten sposób zaczyna
to naprawdę fajnie działać i jest jeszcze jedna rzecz, którą tutaj możemy dodać. Chciałbym
tutaj wyświetlać coś takiego. Wrzucę kawałek kodu, żebyśmy widzieli, że na przykład mamy
zdjęcie drugie z dziesięciu figcaption i tutaj będzie
number, więc chciałbym, żeby tutaj w props również przyjmować number. No
i to może być przekazane w zasadzie, trudno powiedzieć jako string lub jako number,
tak sobie to zwalidujemy, bo to nie będzie miało znaczenia, tutaj będę chciał
to przekazywać chociaż w zasadzie nie, bo to będzie gotowy string, więc może
tak to zapiszmy, bo to będzie powiedzmy 1 ukośnik 10 i teraz skąd to
możemy przekazać tutaj w slideshow byśmy sobie do wyliczyli może
zróbmy taki computed property w tym miejscu number. Jeśli
go zrobimy to od razu może dodajmy go w to miejsce, żeby mieć pewność, że to pójdzie
po prostu tam gdzie powinno i chciałbym tutaj przekazać taki
oto string return. Skorzystam w ES6 z template string'u i on będzie i
tak przekompilowany później. Chciałbym zrobić this
active, czyli jeżeli pierwszy element jest aktywny to jest zero, więc dodamy 1, ukośnik
i zrobimy sobie this images length,
czyli długość tej naszej całej tablicy, więc będziemy mieli aktywny element i
powinno pozostać tutaj odzwierciedlone. Zobaczmy, dokładnie jeden
obrazek na trzy, jak widzisz i teraz jeżeli tutaj active zmienimy na 2,
to również nam się nam będzie poprawnie zmieniać, super to zaczyna działać, już
sporo zrobiliśmy, ale jeszcze chciałbym dodać jedną rzecz tej lekcji i dopiero później
przejdziemy do kolejnej. Mianowicie chciałbym dodać, żeby po kliknięciu w
te strzałki rzeczywiście zmieniały się te obrazki, więc chciałbym
dodać do tych przycisków zdarzenie click i chciałbym
wywołać metodę na slideshow, która się będzie nazywała change slide i przekazać jej
parametr, czyli jeżeli klikam prev, tak jak tutaj, to chciałbym przekazać im wartość
minus 1, skopiuję sobie to, co tutaj mamy i przypisze
do drugiego przycisku, to jest przycisk next i tutaj chciałbym przekazywać wartość
1. Okej, więc teraz musimy sobie stworzyć taką metodę change slide, oczywiście
w tablicy methods, więc zróbmy to może tutaj. Ona
będzie przyjmowała parametr jakiś. Może na początku nazwijmy go dir,
jak direction, czy to będzie w jedną stronę czy w drugą i tutaj będziemy mogli sobie zrobić
logikę następującą. Napiszę sobie let
index równa się i będziemy mieli this active,
czyli na przykład, jeżeli pierwszy slajd jest aktywny to mamy tam 0 i do tego będę chciał
dodać wartość, którą przekazaliśmy pod dir. Tutaj ta wartość to może
być 1 lub minus 1. Jeżeli dodamy minus 1, to tak jakbym odjął po prostu, więc
chcę mieć wartość tego indeksu i teraz będę chciał sprawdzić czy w ogóle w tej tablicy się
coś znajduje pod takim indeksem, więc będziemy tutaj mogli sprawdzić
jeszcze tworząc zmienną slide this
images index, czyli powiedzmy byliśmy na
trzecim obrazku. To active miało wartość 2. Klikam
tutaj next, mam jedynkę. Dodaję to do siebie, mam trójkę i chcę sprawdzić czy
w tej tablicy pod indeksem 3, a więc czwarty element czy on istnieje i tutaj
możemy to sprawdzić. Jeżeli slide nie jest równy undefined, to
znaczy, że coś tam się znajduje i tylko wtedy będziemy chcieli wykonać kod,
który jest tym miejscu, czyli zmienić wartość tak naprawdę active. Będziemy chcieli ustawić
this active równa się właśnie indeks,
okej. Zapiszmy i sprawdźmy, ja tutaj sobie odświeżę, zobaczymy
czy to działa. Klikam w prawo i jak widzisz, jak najbardziej działa. Jeżeli
dojdziemy do końca, tutaj byśmy sprawdzili, że active ma wartość 2, więc ja klikam
na to. Do tej dwójki sobie dodajemy i mamy wartość
3, a trzeci index to byłby element czwarty w tablicy, którego
tam nie ma, więc to nie działa i w drugą stronę również, jak widzisz działa to poprawnie, więc
jeszcze tylko chciałbym zablokować te przyciski, jeżeli nie ma już kolejnych elementów, jak
widać nic się nie dzieje, ale chciałbym pokazać użytkownikowi, że tak rzeczywiście jest,
więc jak byśmy to mogli zrobić. Może po prostu na
te przyciski dodamy sobie disabled i zbindujemy
go w zależności od computed property, czyli ten przycisk to jest prev, a więc
pierwszy, czyli jeżeli jesteśmy na starcie, to
chcę żeby ten przycisk był zablokowane. A tutaj jeżeli jesteśmy na końcu, więc musimy
sobie dodać dwie computed properties, start oraz end i jak
określić czy jesteśmy na początku. No wystarczy sprawdzić czy this active
to jest 0, wtedy jesteśmy na początku, a end jak
sprawdzić czy jesteśmy już przy ostatnim elemencie. Sprawdzimy czy this images
length, tutaj jeszcze może this active najpierw, czy
this active równa się. Jeżeli
powiedzmy aktywny jest drugi to chcemy sprawdzić czy on się równa ilości czy liczbie
elementów tablicy minus 1. Okej, jeżeli tam są trzy elementy to
lenght zwróci nam trzy, odejmujemy sobie od tego jedynkę to jest 2 i
aktywny to powinien być drugi. Mamy 012. Teraz po odświeżeniu, jak
widzisz działa to dokładnie tak jak chcieliśmy, ten przycisk jest zablokowany, bo jesteśmy na starcie. Jeżeli
przejdziemy dalej on się automatycznie odblokuje. Jeżeli wrócimy to się zablokuje. No
i jeżeli dojdziemy tutaj do końca to ten przycisk również, jak widzisz, się zablokował,
więc trochę długa lekcja, ale wiele tutaj zrobiliśmy, jak widzisz wszystko działa
sposób reaktywny. Również tutaj z tym licznikiem, a w kolejnej lekcji będę
chciał tutaj dodać freeloader obrazów po to, żebyśmy mogli po kliknięciu
wyświetlić tutaj ładowanie i pobrać obrazek z serwera, żeby
dopiero później to zamienić, kiedy uda nam się go pobrać z serwera.