【Vue3】slot元件插巢

Vue3

【Vue3】slot元件插巢

Vue3


卡片元件

1
2
3
<div id="app">
  <card-component></card-component>
</div>

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
const app = Vue.createApp({ })

app.component('card-component',{
  data(){
    return{
      count: 2
    }
  },
  template:`
  <div class="card">
    <div class="card-header">卡片標題</div>
    <div class="card-body">
      <p class="card-text">卡片內容</p>
    </div>
    <div class="card-footer text-muted">卡片底部</div>
  </div>
  `
})

app.mount("#app");


卡片元件+不具名slot

1
2
3
4
5
<div id="app">
  <card-component>
    <p>這是我自訂的內容</p>
  </card-component>
</div>

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
const app = Vue.createApp({ })

app.component('card-component',{
  data(){
    return{
      count: 2
    }
  },
  template:`
  <div class="card">
    <div class="card-header">卡片標題</div>
    <div class="card-body">
      <p class="card-text">
        <slot><slot>
      </p>
    </div>
    <div class="card-footer text-muted">卡片底部</div>
  </div>
  `
})

app.mount("#app");


卡片元件+具名slot

1
2
3
4
5
6
7
<div id="app">
  <card-component>
    <template v-slot:header>自定義的標題</template>
    <template v-slot:default>自定義的內容</template>
    <template v-slot:footer>自定義的底部</template>
  </card-component>
</div>

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const app = Vue.createApp({})

app.component('card-component',{
  data(){
    return{
      count: 2
    }
  },
  template:`
  <div class="card">
    <div class="card-header">
      <slot name="header">卡片標題</slot>
    </div>
    <div class="card-body">
      <p class="card-text">
        <slot>卡片內容</slot>
      </p>
    </div>
    <div class="card-footer text-muted">
      <slot name="footer">卡片底部</slot>
    </div>
  </div>
  `
})

app.mount("#app");

縮寫:

1
2
3
4
5
6
7
<div id="app">
  <card-component>
    <template #header>自定義的標題</template>
    <template #default>自定義的內容</template>
    <template #footer>自定義的底部</template>
  </card-component>
</div>

如果沒有寫對應的<template v-slot>,就會顯示原本的內容

Vue3 

其他相關