实现思路
- 创建一个商品列表组件,在组件模板中定义固定展示的商品名称和价格部分。
- 使用Vue的默认插槽,在商品列表组件模板中预留位置,用于插入不同商品的额外信息。
- 在使用商品列表组件时,通过插槽传入不同商品对应的额外信息。
关键代码示例
商品列表组件(ProductList.vue)
<template>
<div>
<div v-for="product in products" :key="product.id">
<h3>{{ product.name }}</h3>
<p>价格: {{ product.price }}</p>
<slot :product="product"></slot>
</div>
</div>
</template>
<script>
export default {
data() {
return {
products: [
{ id: 1, name: '手机', price: 3000, type: '电子产品', model: 'iPhone 14' },
{ id: 2, name: 'T恤', price: 100, type: '服装', size: 'L' }
]
};
}
};
</script>
使用商品列表组件(App.vue)
<template>
<div id="app">
<ProductList>
<template v-slot:default="slotProps">
<div v-if="slotProps.product.type === '电子产品'">
型号: {{ slotProps.product.model }}
</div>
<div v-if="slotProps.product.type === '服装'">
尺码: {{ slotProps.product.size }}
</div>
</template>
</ProductList>
</div>
</template>
<script>
import ProductList from './components/ProductList.vue';
export default {
components: {
ProductList
}
};
</script>