Custom web components

Hallo!😁

Disini saya baru saja melihat tutorial untuk membuat custom components dengan javascript,

Kode [ index.html ] :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Basic Web Component</title>
</head>
<body>
    <my-custom-component></my-custom-component>

    <template id="ElementCustom">
     <style>

      h1{ color:blue; }

    </style>
     <h1>This is from Custom Component</h1>
    </template>

    <script type="text/javascript">
    class MyCustomComponent extends HTMLElement{
        constructor() {
          // Always call this method in the constructor
          super();

          /** Get Object template tag via DOM who define
           *  by id 'Element Custom'
           *  you can also use function getEmelentById()
           */
          let template = document.querySelector('#ElementCustom')

          // Clone content inside template tag
          let templateHTML = template.content.cloneNode(true);

          // Initialize a Shadow DOM
          let shadowdom = this.attachShadow({mode:'open'});

          // Attach value of Template content into Shadow DOM
          shadowdom.appendChild(templateHTML)
        }
    }

    customElements.define("my-custom-component",MyCustomComponent)

  </script>

</body>
</html>

Nah, pas saya coba run kode itu di browser dan berhasil memanggil custom components itu :

<my-custom-component></my-custom-component>

Dan muncul di browser tulisan " h1 " yang saya masukkan di dalam tag template.

ketika saya mau masukan bagian [ components.html ] :

<template id="ElementCustom">
     <style>

      h1{ color:blue; }

    </style>
     <h1>This is from Custom Component</h1>
</template>

dalam file terpisah,

nama filenya adalah :

components.html

dan saya import di index.html itu,

seperti ini :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Basic Web Component</title>
    <link rel="import" href="components.html">
</head>
<body>

    <my-custom-component></my-custom-component>

    <script type="text/javascript">
    class MyCustomComponent extends HTMLElement{
        constructor() {
          // Always call this method in the constructor
          super();

          /** Get Object template tag via DOM who define
           *  by id 'Element Custom'
           *  you can also use function getEmelentById()
           */
          let template = document.querySelector('#ElementCustom')

          // Clone content inside template tag
          let templateHTML = template.content.cloneNode(true);

          // Initialize a Shadow DOM
          let shadowdom = this.attachShadow({mode:'open'});

          // Attach value of Template content into Shadow DOM
          shadowdom.appendChild(templateHTML)
        }
    }

    customElements.define("my-custom-component",MyCustomComponent)

  </script>

</body>
</html>

ketika saya run kembali di browser, hasil pagenya kosong "tidak ada apa² yang muncul di page itu, dan tidak ada error juga"

Hmm🤔, kira" letak kesalahannya dimana yaa?

Apakah file components.html itu tidak bisa di import?

Semoga jelas!

avatar X451
@X451

41 Kontribusi 30 Poin

Diperbarui 3 tahun yang lalu

1 Jawaban:

<div><a href="https://caniuse.com/?search=html%20import">Html Import</a> sudah tidak disupport lagi.<br>Bisa manfaatkan <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import">ES Module</a> atau tunggu proposal <a href="https://www.chromestatus.com/feature/4854408103854080">HTML Module</a>.<br>Atau kalau mau mirip-mirip bisa pakai <a href="https://github.com/polight/lego">Lego Web Component</a>.</div>

avatar soeleman
@soeleman

120 Kontribusi 147 Poin

Dipost 3 tahun yang lalu

Login untuk ikut Jawaban