<div id="app">
  <div class="p-5">
    <h3>插巢 Prop</h3>
    <p>將元件內的變數取出使用,稱為 slot prop</p>
    <card>
      <template #default="slotProps">
        {{slotProps}}
      </template>
    </card>
    <hr>
    <h2>多個(解構)</h2>
    {{ product }}
    <card2 :product="product">
      <template #default="{product,veganName='如果slot沒有傳出veganName變數時會使用此預設字串'}">
        {{product}} {{veganName}}
      </template>
    </card2>
  </div>
</div>
const app = Vue.createApp({
  data() {
    return {
      product: {
        name: '蛋餅',
        price: 30,
        vegan: false
      }
    }
  },
});

app.component('card', {
  data() {
    return {
      product: {
        name: '蛋餅',
        price: 30,
        vegan: false
      },
      product2:{
        name: '蔥抓餅',
        price: 80,
        vegan: true
      }
    }
  },
  template: `<div class="card" style="width: 18rem;">
      <div class="card-body" >
        <slot :pd1="product" :pd2="product2"></slot>
      </div>
    </div>`
});

app.component('card2', {
  props: ['product'],
  data() {
    return {
      veganName: ''
    }
  },
  created() {
    console.log()
    this.veganName = this.product.vegan ? '素食' : '非素食';
  },
  template: `<div class="card" style="width: 18rem;">
      <div class="card-body" >
        <slot :product="product" :veganName="veganName"></slot>
      </div>
    </div>`
})

app.mount('#app');
Run Pen

External CSS

  1. https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.0.2/css/bootstrap.min.css

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/vue/3.2.37/vue.global.prod.min.js