Vue - Slot 的用法

1.slot 標籤基本用法

2.slot 具名

3.使用 <template> - 不想額外產生標籤

1.slot 標籤基本用法

<div id="app">
<h2>Slot 基礎範例</h2>
 <single-slot-component>
  <p> 使用這段取代原本的 Slot。</p>
 </single-slot-component>
 <single-slot-component>
 </single-slot-component>
</div>

<script type="text/x-template" id="singleSlotComponent">
 <div class="alert alert-warning">
  <h6>我是一個元件</h6>
  <slot>
	如果沒有內容,則會顯示此段落。
  </slot>
 </div>
</script>

(2)template 內的slot 會被HTML裡面的 <single-slot-component> 內的HTML <p>取代(1)

如果在 template 內沒有宣告 slot ,則HTML裡面定義在 <single-slot-component> 的元件都會消失

2.具名 slot

<div id="app">
 <h2>具名插槽</h2>
 <named-slot-component>
 </named-slot-component>

 <named-slot-component>
  <header slot="header">替換的 Header</header>
  <template>替換的 Footer</template>
  <template slot="btn">按鈕內容</template>
  <p>其餘的內容</p>
 </named-slot-component>
</div>

<script type="text/x-template" id="namedSlotComponent">
 <div class="card my-3">
  <div class="card-header">
   <slot name="header">這段是預設的文字</slot>
  </div>
  <div class="card-body">
   <slot>
	<h5 class="card-title">Special title treatment</h5>
	<p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
   </slot>
   <a href="#" class="btn btn-primary">
	<slot name="btn">spanGo somewhere</slot>
   </a>
  </div>
  <div class="card-footer">
   <div>這是預設的 Footer</div>
  </div>
 </div>
</script>

如果template 內有多個地方需要取代,可以在外部定義 slot = "自訂命名"

在template 內部的slot 定義 name = "自訂命名"

以上面的程式碼為例

1會對應到2 的位置,3會對應到4的位置

3.使用 <template> - 不想額外產生標籤

slot 的取代原理會是外部的標籤直接換進來,如果不想產生額外的標籤,

在外面可使用標籤 <template> 如上圖的 3 取代 4