Componente Vue
Vue Component = un set de unelte și/sau resurse care permite dezvoltarea mai rapidă.
Structura unei Componente Vue
Un simplu exemplu de declarare a unei componente Vue, care zice "Hello, World"
Un component are 3 blocuri principale:
template
- definim html-ul componentei, cu o serie de directive și constructori care ne ușurează viața (urmează să-i învățăm)script
- definim logica JavaScript a componentei, e un obiect care definește date, acțiuni, și alte elemente folositoarestyle
- stilurile folosite de componenta noastră, ca să arate bine! Observați atributul scoped, el definește ca stilurile definite în această componentă să fie izolate, și să nu fie vizibile de alte componente, comod!
Componentele sunt instanțe Vue reutilizabile cu un nume, în cazul nostru, <HelloWorld>.
Putem folosi acest component ca un element personalizat în interiorul aplicației noastre:
Reutilizarea componentelor
Componentele pot fi reutilizate de câte ori ne dorim, spre exemplu:
Data
Orice componentă poate defini date, care pot fi folosite în template
sau în script
:
data
trebuie să fie funcție
data
trebuie să fie funcțieObservăm că definirea datelor e o funcție, și nu un obiect simplu, cum ar fi:
data
trebuie să fie o funcție. Astfel, pentru fiecare utilizare a componentei se menține o copie independentă cu informația returnată.
În caz contrar, dacă nu am folosi regula dată, în exemplul nostru, de fiecare dată când dăm click pe button ar fi afectată informația pentru toate celelalte exemple.
Interpolare
Text
Cea mai de bază formă de legare a datelor este interpolarea textului folosind sintaxa „Mustață”/„Mustache” (bretele duble - {{ }}
):
Acest tag va fi înlocuit cu valoarea proprietății obiectului msg
corespunzătoare și va fi actualizat oricând valoarea proprietății obiectului msg
se schimbă.
De asemenea, putem executa interpolări unice care nu actualizează la modificarea datelor utilizând directivul v-once, care afectează toate legăturile din elementul în care este definit.
Raw HTML
Interpolarea {{ }}
interpretează datele ca text simplu, nu HTML. Asta înseamnă că chiar dacă textul nostru va conține html, el va fi reprezentat ca text direct. Pentru a produce HTML, trebuie să utilizăm directivul v-html:
Interiorul la span
va fi înlocuit cu valoarea proprietății rawHtml
, interpretat ca HTML curat - legăturile datelor fiind neglijate. Observați că nu putem utiliza v-html
pentru a compune șabloane parțiale, deoarece Vue nu e un motor de șabloane pe bază de șiruri.
Atribute
{{ }}
nu pot fi utilizate în interiorul atributelor HTML. În schimb, utilizăm directivul v-bind
:
O sintaxă prescurtată e să omitem v-bind
:
În cazul atributelor de tip boolean, unde simpla lor existență presupune true
, v-bind
lucrează într-un mod ușor diferit:
Dacă isButtonDisabled
are valoarea null
, undefined
sau false
, atributul disabled
nici nu va fi inclus în interpretarea elementului <button>
.
Utilizarea expresiilor JavaScript
Vue.js suportă puterea totală a expresiilor JavaScript în interiorul tuturor legăturilor de date.
Aceste expresii vor fi evaluate ca JavaScript în sfera de date a instanței Vue a proprietarului. O restricție este că fiecare legătură poate conține o singură expresie.
Reactivitatea datelor
Datele în componente sunt reactive - atunci când datele se schimbă, vizualizarea va fi refăcută automat. Trebuie de menționat că proprietățile în data
sunt reactive doar dacă au existat atunci când instanța a fost creată.
Proprietăți calculate (Computed Properties)
Proprietățile din șablon sunt foarte convenabile, dar sunt predestinate pentru operații simple. Prea multă logică în șabloanele noastre le-ar putea supraîncărca și le-ar face dificile de menținut. De exemplu:
În acest moment, șablonul nu mai este simplu și enunțiativ. Ar trebui să te uiți un pic și să analizezi înainte de a realiza că se afișează message
invers. Problema devine și mai gravă când dorești să incluzi mesajul invers în șablonul tău încă o dată.
Din acest motiv, pentru logică mai complexă, se utilizează proprietățile calculate.
Exemplu:
Orice metodă (funcție) a componentei are acces la cuvîntul cheie this
, care reprezintă obiectul curent, respectiv poate accesa toate datele, și alte metode din componentă.
Aici am declarat funcția reversedMessage()
sub blocul computed
. Ea va fi folosită ca funcție reproducătoare pentru proprietatea {{ reversedMessage }}
.
Valoarea lui reversedMessage
este dependentă de valoarea lui message
. E recalculată de fiecare dată când valoarea originală se schimbă, și păstrează această valoare pentru a mări performanța. Urmărește modificarea datelor în același mod cum sunt urmărite modificările pentru interpolări în template.
Condiționalele
v-if
Directiva v-if este utilizată pentru redarea condiționată a unui bloc. Blocul va fi redat doar dacă expresia directivei returnează o valoare adevărată.
Este, de asemenea, posibil de adăugat și blocul „else” utilizând v-else:
Grupuri condiționale cu v-if în <template>
Deoarece v-if
este o directivă, a fost atașat unui singur element, dar cum putem afișa mai multe elemente? În acest caz putem utiliza v-if
într-un element <template>
, care servește ca un ambalaj invizibil. Redarea finală a rezultatului nu va include elementul <template>
.
v-else
Se poate utiliza directiva v-else
pentru a indica un bloc „else" pentru v-if:
Un element v-else
trebuie să urmeze imediat un element v-if
sau v-else-if
- în caz contrar nu va fi recunoscut.
v-else-if
V-else-if servește ca un „else if block” pentru v-if. De asemenea, poate fi legat de mai multe ori:
Similar la v-else, un element v-else-if
trebuie numaidecât să urmeze un element v-if
sau v-else-if
.
Randarea Listelor
v-for
Pentru a randa un array de elemente, folosim directiva v-for
. Această directivă necesită o sintaxă specială sub forma item in items
, unde items
este un array de date, iar item
va fi variabila locală în template
v-for
îl definim peste elementul care vrem să-l repetăm. În acest caz vrem mai multe elemente <li>
:key
e important să-l definim pentru a-l ajuta pe Vue să identifice ușor care element din array corespunde elementului din html, și în caz dacă ștergem sau mutăm cu locul elementele, să păstreze valorile din el. Devine foarte util spre exemplu când lucrăm cu forme și inputs.
Recomandarea generală e să-l definim întotdeauna, cu valoarea care unic poate identifica obiectul, deobicei un id sau un string unic
Index
În cazurile când avem nevoie și de index (poziția curentă) putem adăuga un element adițional în v-for
:
Metode
Când vrem să executăm acțiuni la anumite evenimente, trebuie să definim logica care le va prelucra - event handlers. De asemenea, uneori vrem să definim funcții ajutatătoare care îndeplinesc o anumită funcționalitate.
Pentru asta putem defini o serie de metode. O metodă e o funcție obișnuită, care aparține unui obiect (în cazul nostru componentei), și are acces la acest obiect (componentă) prin cuvântul cheie this
Aceste metode pot fi folosite ca acțiuni la evenimente pentru a adăuga interactivitate componentelor noastre. Un exemplu de counter simplu:
Evenimente
Evenimentele în Vue ne permit să executăm diferite metode la acțiunile pe care utilizatorul le face.
Evenimentele în forma desfășurată se definesc prin directivul v-on
, urmat de evenimentul care vrem să-l „prindem”. Unul din cele mai des folosite evenimente este click:
În acest exemplu componenta va avea definită o metodă doSomething()
care va fi apelată când utilizatorul va face click pe acest buton.
Putem defini evenimentul și în formă presucrată, înlocuind directivul v-on
cu @
Modificatori de evenimente (Event modifiers)
Este o necesitate comună să apelăm event.preventDefault( )
sau event.stopPropagation( )
în interiorul manipulatorilor de evenimente. Chiar dacă putem face asta în interiorul metodelor, ar fi mai bine dacă metodele ar fi doar despre logica datelor, mai degrabă decât să aibă de-a face cu detaliile evenimentelor DOM.
Pentru a adresa această problemă, Vue furnizează modificatori de evenimente pentru v-on
. Să ne reamintim că modificatorii sunt sufixe directive notate cu un punct.
.stop
.prevent
.capture
.self
.once
.passive
Pentru mai multe detalii, click aici.
Modificatori de taste (Key modifiers)
Atunci când ascultăm evenimentele de la tastatură, de multe ori trebuie să verificăm anumite taste. Vue permite adăugarea modificatorilor de taste pentru v-on
atunci când ascultăm evenimentele de la taste.
Se poate folosi direct orice nume de tastă validă KeyboardEvent.key
neacoperită utilizând cazul-kebab.
În ultimul exemplu, manipulatorul va fi chemat doar dacă $event.key
e egal cu 'PageDown'
.
#Key Codes
Vue oferă pseudonime pentru cele mai utilizate coduri de taste:
.enter
.tab
.delete
.esc
.space
.up
.down
.right
.left
De asemenea, se poate defini o tastă predefinită prin intermediului obiectului global config.keyCodes
:
Taste modificatoare de sistem
Putem folosi următorii modificatori pentru a declanșa evenimentele de la tastatură sau mouse doar când modificatorii corespunzători sunt apăsați:
.ctrl
.alt
.shift
.meta
Exemplu:
Modificatorul .exact
Modificatorul dat permite controlul unor combinații exacte a sistemului pentru a declanșa un eveniment.
Modificatori pentru butoanele mouse-ului
.left
.right
.middle
Proprietăți implicite
Pe lângă datele, și metodele definite de noi, componentele Vue expun un număr de proprietăți și metode ale instanței. Acestea au prefixul $
pentru a le diferenția de proprietățile definite de utilizator. (Pentru mai multe detalii, puteți accesa aici)
Last updated