CodeBlanks Logo Icon CodeBlanks

Meydan okuma - Custom element

JavaScript kursu · İleri seviye · Ders 100/100

Custom elements ve shadow DOM ile bileşen yapısı yazarsın.

Custom element

Bu meydan okumada bir custom element yazacaksın: <bookmark-card> etiketi. Önce HTMLElement'i türeten bir sınıf tanımlarsın.

Sınıfı kaydetmek için customElements.define('bookmark-card', BookmarkCard) çağırırsın. İlk argüman etiket adıdır ve bir tire içermelidir.

Yaşam döngüsü callback'lerinden connectedCallback, element belgeye bağlandığında tetiklenir. Burada this.attachShadow({ mode: 'open' }) ile bir shadow root açar ve içeriği içine yazarız; böylece stiller dışarı sızmaz.

Shadow DOM ve yaşam döngüsü

Bir custom element'in içeriğini dışarından izole etmek için shadow DOM kullanırsın. this.attachShadow({ mode: 'open' }) elemente bir shadow root bağlar.

Dönen shadow root'un innerHTML'ine HTML yazarsın; bu içerik dış belgeden ayrı kalır ve stilleri etkilemez.

connectedCallback yaşam döngüsü callback'idir: element DOM'a her eklendiğinde çağrılır. Burada shadow root açmak ve içeriği yazmak en sık kullanılan kalıptır.

Uygulama BookmarkCard elementini yaz

Bir BookmarkCard sınıfı yaz: HTMLElement'i türetir ve connectedCallback yöntemi içerir. Bu yöntemde this.attachShadow({ mode: 'open' }) ile shadow root aç ve innerHTML'ine bir paragraf yaz. Sonra customElements.define('bookmark-card', BookmarkCard) ile kaydet.

Örnek çözümü göster
'open' }) çağır ve shadow.innerHTML ata. En sona customElements.define('bookmark-card', BookmarkCard); yaz.

Örnek çözüm:
class BookmarkCard extends HTMLElement {
  connectedCallback() {
    const shadow = this.attachShadow({ mode: 'open' });
    shadow.innerHTML = '<p>Yer imi</p>';
  }
}
customElements.define('bookmark-card', BookmarkCard);

Kendini test et

  1. Bir custom element nasıl kaydedilir?

    customElements.define('bookmark-card', BookmarkCard);
    • document.registerElement
    • customElements.define
    • window.defineElement
    • HTMLElement.register
    Cevabı göster

    customElements.define — Doğru! customElements.define etiket adını ve sınıfı alır.

  2. Elementi kaydet

    class BookmarkCard extends HTMLElement {
      constructor() {
        super();
      }
    }
    ____;
    Cevabı göster
    class BookmarkCard extends HTMLElement {
      constructor() {
        super();
      }
    }
    customElements.define('bookmark-card', BookmarkCard);

İleri seviye bölümündeki tüm dersler