🔸<slot>

╱🚧 under construction -> default slot

webcomponent ⟩ <slot>

<slot> 是在自訂元素內部 <template> 定義的插槽任何放在自訂元素標籤間的最上層 HTML 元素或文字,會插入 <slot> 裡面。

  • 沒有指定插槽名稱的,會放入 default slot (也就是沒有名稱<slot>)。

  • 指定插槽名稱的,會放入 named slot (也就是名稱<slot>)。

使用方式

📁 自訂元素<template> 中:定義 <slot> 的位置(也可以放 named slot

<template id="my-component-template">

  <style>
    .container {
      border: 1px solid blue;
      padding: 10px;
    }
  </style>
  
  <div class="container">
    <p>This is some default text.</p>
    
    <!-- ⭐️ 1️⃣ 決定 <slot> 位置 -->
    <slot></slot> 
    
    <p>This is more default text.</p>
  </div>
</template>

使用 slotchange 事件

<slot>內容發生變化時(如插入或移除 slotted nodes ),就會觸發 slotchange 這個事件。你可以使用這個事件來監聽 slotted nodes 的變化,並執行相應的操作。

constructor() {

  super();
  let root = this.attachShadow({ mode: 'open' });  // root == this.shadowRoot
  // ... (其他程式碼)

  // ⭐️ "slotchange" event
  const slot = root.querySelector('slot');
  
  slot.addEventListener('slotchange', (event) => {
    console.log('Slot 內容發生變化!');
    const slottedNodes = slot.assignedNodes();
    console.log('Slotted nodes:', slottedNodes);
  });
  
}

Last updated