Web-komponentit

Harjoitellaan omien html-elementtien eli web-komponenttien tekemistä. Rakennetaan askel askeleelta sovellus, jossa on laskuri, suodattuva autolistaus, autojen valinta ja poisto sekä lomake uusien autojen lisäämiseen. Lopuksi lisätään komponentteihin reaktiivisuus: näkymä päivittyy itsestään, kun tila muuttuu.

Web-komponentit ovat selaimen omaa tekniikkaa. Mitään kirjastoja tai työkaluja ei tarvitse asentaa: komponentti on JavaScript-luokka, joka periytyy HTMLElement-luokasta, ja valmista komponenttia käytetään sivulla kuten mitä tahansa html-elementtiä.

Tutustu ennen aloittamista:

Luennolla todetaan, että oman sovelluksen komponentit voi useimmiten tehdä ilman shadow DOMia. Tässä ohjauksessa sitä kuitenkin käytetään, jotta sen hyödyt ja rajoitukset tulevat tutuiksi käytännössä: tyylien kapselointi, composed-tapahtumat ja lomakkeeseen osallistuvat komponentit.

Mallivastaukset ja esimerkit

Pääsy alkuun

Laskuri

Autolistaus

Valinta ja poisto

Sovellus

Kootaan komponentit yhdeksi sovellukseksi. Myös sovellus on komponentti, ja se luo muut komponentit omaan shadow DOMiinsa:

<auto-sovellus></auto-sovellus>
<auto-sovellus>           tila: autotaulukko
  <auto-laskuri>          attribuutti lisays, sisältö otsikkona
  <auto-lomake>           tapahtuma lisays          (tehdään seuraavaksi)
  <suodatettu-lista>      ominaisuus autot, tapahtuma poisto
    <auto-lista>          ominaisuus autot, tapahtumat valinta ja poisto

Tieto kulkee alaspäin attribuutteina ja ominaisuuksina ja ylöspäin tapahtumina.

Lomake

Lisää lomake, jolla voi lisätä uusia autoja listaan.

Fetch ja elinkaari

Tämä osa on vapaaehtoinen. Haetaan autolistaus palvelimelta sen sijaan, että se kirjoitettaisiin koodiin.

Reaktiivisuus

Sovelluksessa on toistuva kuvio: tila muuttuu, ja sen jälkeen on muistettava kutsua #paivita-metodia. Sovellus kuuntelee valinta-tapahtumaa pelkästään siksi, että se osaisi päivittää laskurin. Reaktiivisuus kääntää asetelman: näkymä päivittyy itsestään aina, kun sen käyttämä tila muuttuu.

Template-elementti

Tähän asti komponenttien rakenne on luotu createElement-kutsuilla. Rakenteen voi kirjoittaa myös tavallisena merkkauksena template-elementtiin, jonka komponentti kloonaa itselleen. Tehdään komponentti auto-kortti, joka näyttää auton tiedot kortissa. Kts. esimerkki.

Lopuksi

Lisätietoa

Käyttäjien kommentit

Kommentoi Lisää kommentti