Ihsan Magazine – Kali ini kita akan mencoba belajar membuat Custom Element dasar di Javascript, apa itu Custom Element? Gampang nya Custom Element seperti kita Membuat Tag HTML baru untuk Front End Developer.

Bisa untuk memperluas elemen bawaan HTML, dan masih banyak lagi, dasarnya menggunakan\ Elements global digunakan untuk mendefinisikan elemen khusus dan mengajarkan tag baru pada browser.

Panggil customElements.define() dengan nama tag yang ingin Anda buat dan class JavaScript yang memperluas HTMLElement dasar.

Selengkapnya Baca Disini

Kali ini Study Kasus dengan ClubFinder.zip

Jika kita telaah dengan seksama, pada proyek Club Finder terdapat 4 (empat) bagian yang berpotensi untuk dijadikan custom element, yaitu:

  1. App Bar : Komponen di posisi atas yang menunjukkan identitas atau nama dari aplikasi web.
  2. Search Bar : Komponen yang terdiri dari elemen dan dan berfungsi untuk melakukan pencarian club sesuai dengan input pengguna.
  3. Club List : Komponen yang berfungsi untuk menampung data dari hasil pencarian, kemudian menampilkannya dalam bentuk list.
  4. Club Item : Komponen yang menampilkan data individual club yang diberikan dari club list. Komponen ini terdiri dari gambar, nama, dan deskripsi singkat club.

Solution: Membuat app-bar Component

Apakah Anda berhasil menerapkan custom element pada proyek Club Finder? Jika belum, mari kita lakukan bersama-sama. Kita mulai dari komponen termudah terlebih dahulu yaitu App Bar.
Agar mengelola berkas pada proyek jadi lebih mudah, kita perlu membuat folder baru dengan nama “component” di dalam folder src -> script.
20200310192559e057df7d65da0d6b4369a31dfa0bcf60.png
Folder ini akan menampung berkas JavaScript yang digunakan dalam membuat custom element.
Lalu di dalam folder component, buat berkas JavaScript baru dengan nama “app-bar.js”. Kemudian kita buat class dengan nama AppBar yang mewarisi sifat HTMLElement.

  1. class AppBar extends HTMLElement {

  2.   

  3. }


Kemudian di dalam body block classnya, kita implementasi method connectedCallback dan membuat fungsi render.

  1. class AppBar extends HTMLElement {

  2.    connectedCallback(){

  3.  

  4.    }

  5.  

  6.    render() {

  7.       

  8.    }

  9. }


Seperti yang sudah kita ketahui, connectedCallback() akan terpanggil ketika element telah diterapkan pada DOM. Jika kita ingin element ini ketika diterapkan langsung melakukan rendering maka kita dapat memanggil fungsi this.render() di dalam connectedCallback.

  1. class AppBar extends HTMLElement {

  2.    connectedCallback(){

  3.        this.render();

  4.    }

  5.  

  6.    render() {

  7.  

  8.    }

  9. }


Lalu pada fungsi render, kita tuliskan kode yang berfungsi untuk menampilkan elemen yang dibutuhkan pada melalui properti this.innerHTML. Apa saja yang dibutuhkan? Kita bisa melihatnya pada berkas index.html


  1.        <div id="appBar" class="app-bar">

  2.            

    Club Finder


  3.        



  • Di dalam elemen 

     terdapat elemen 

     yang menerapkan class “app-bar”. Nah kita copy element di dalam app-bar, dan paste untuk dijadikan nilai pada this.innerHTML di fungsi render().

    1. class AppBar extends HTMLElement {

    2.    connectedCallback(){

    3.        this.render();

    4.    }

    5.  

    6.    render() {

    7.        this.innerHTML = `

      Club Finder

      `
      ;

    8.    }

    9. }


    Lalu di akhir berkas app-bar.js, jangan lupa untuk definisikan custom element yang kita buat agar dapat digunakan pada DOM.

    1. class AppBar extends HTMLElement {

    2.    connectedCallback(){

    3.        this.render();

    4.    }

    5.  

    6.    render() {

    7.        this.innerHTML = `

      Club Finder

      `
      ;

    8.    }

    9. }

    10.  

    11. customElements.define("app-bar", AppBar);


    Dengan begitu kita dapat mengubah penerapan app-bar pada index.html dengan menggunakan tag .


    1.       



    Terakhir, agar kode pada berkas app-bar.js tereksekusi, impor berkas app-bar.js pada berkas app.js, seperti ini:

    1. import "./src/script/component/app-bar.js";


    Tuliskan kode tersebut pada awal berkas app.js, sehingga keseluruhan kode pada berkasnya akan tampak seperti ini:

    1. import "./src/script/component/app-bar.js";

    2. import main from "./src/script/view/main.js";

    3.  

    4. document.addEventListener("DOMContentLoaded", main);


    Kemudian coba kita buka proyeknya menggunakan local server. Inilah tampilan hasilnya:
    2020031019350448bf1ff8d96767443908e81b171563c3.png
    Oops, tampilan App Bar tampak berantakan. Kita perlu memperbaiki css yang digunakan pada elemen App Bar sebelumnya. Buka berkas appbar.css lalu ubah selector-nya dari .app-bar menjadi app-bar.

    1. app-bar {

    2.    padding: 16px;

    3.    width: 100%;

    4.    background-color: cornflowerblue;

    5.    color: white;

    6.    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);

    7. }


    Lalu lihat kita lihat hasilnya.
    2020031019360718a18a9301e96c9237e9d2bd80d3dda2.png
    Yah, kini teks “Club Finder” tidak tampak karena background element tidak bekerja dengan baik. Kenapa begini yah? Pasalnya, custom element standarnya merupakan inline element, sehingga tidak akan mengisi panjang lebar parent element-nya. Solusinya adalah dengan mengubah sifat inline pada custom element menjadi block dengan cara menambahkan properti display dengan nilai block pada selector app-bar.

    1. app-bar {

    2.    display: block;

    3.    padding: 16px;

    4.    width: 100%;

    5.    background-color: cornflowerblue;

    6.    color: white;

    7.    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);

    8. }


    Dengan begitu tampilan kita berhasil membuat custom element  dengan baik!
    20200310193753886f026632febaa362d6775a39bbc28d.png

    Membuat search-bar Component

    Pembuatan elemen  lebih sedikit rumit dari pembuatan komponen sebelumnya, karena di dalam komponen search bar terdapat element  dan . Kombinasi kedua element tersebut digunakan dalam mencari data club. Sebisa mungkin kita membuat custom element  sehingga   mempermudah kala menggunakan komponen tersebut.
    Mari kita mulai dengan membuat berkas JavaScript baru dengan nama search-bar.js. Kemudian di dalamnya kita membuat class SearchBar dengan mewarisi sifat HTMLElement.

    1. class SearchBar extends HTMLElement {

    2.   

    3. }


    Kemudian kita implementasi method connectedCallback dan membuat fungsi render.

    1. class SearchBar extends HTMLElement {

    2.    connectedCallback(){

    3.  

    4.    }

    5.   

    6.    render() {

    7.       

    8.    }

    9. }


    Lalu panggil fungsi render() di dalam connectedCallback().

    1. class SearchBar extends HTMLElement {

    2.    connectedCallback(){

    3.        this.render();

    4.    }

    5.   

    6.    render() {

    7.  

    8.    }

    9. }


    Di dalam fungsi render kita ambil elemen yang dibutuhkan untuk ditampilkan dari berkas index.html.

    1. <div id="search-container" class="search-container">

    2.    <input placeholder="Search football club" id="searchElement" type="search">

    3.     <button id="searchButtonElement" type="submit">Search



    Agar mudah, copy seluruh kode tersebut dan paste untuk dijadikan nilai this.innerHTML di dalam fungsi render.

    1. class SearchBar extends HTMLElement {

    2.    connectedCallback(){

    3.        this.render();

    4.    }

    5.   

    6.    render() {

    7.        this.innerHTML = `

    8.        

    9.            

    10.            Search

    11.