vue实现card的单选
实现 Vue Card 单选功能
在 Vue 中实现 Card 单选功能可以通过以下方式完成,这里以 Vue 3 的 Composition API 为例。
数据绑定与状态管理
使用 ref 或 reactive 创建响应式数据存储当前选中的卡片 ID,并通过 v-model 或 :class 动态绑定选中状态。
<script setup>
import { ref } from 'vue';
const cards = [
{ id: 1, title: 'Card 1' },
{ id: 2, title: 'Card 2' },
{ id: 3, title: 'Card 3' }
];
const selectedCardId = ref(null);
const selectCard = (id) => {
selectedCardId.value = id;
};
</script>
模板渲染与交互
通过 v-for 渲染卡片列表,根据 selectedCardId 动态添加选中样式,并通过 @click 触发选择逻辑。
<template>
<div class="card-container">
<div
v-for="card in cards"
:key="card.id"
class="card"
:class="{ 'card--active': selectedCardId === card.id }"
@click="selectCard(card.id)"
>
{{ card.title }}
</div>
</div>
</template>
样式控制
通过 CSS 定义卡片的基础样式和选中状态的高亮效果。
<style scoped>
.card {
border: 1px solid #ddd;
padding: 20px;
margin: 10px;
cursor: pointer;
transition: all 0.3s;
}
.card--active {
border-color: #42b983;
background-color: #f0f9eb;
}
</style>
使用单选框的替代方案
如果需要更严格的表单行为,可以用 <input type="radio"> 结合透明化样式实现。
<template>
<div class="radio-card-group">
<label
v-for="card in cards"
:key="card.id"
class="radio-card"
>
<input
type="radio"
:value="card.id"
v-model="selectedCardId"
hidden
>
<div class="card-content">
{{ card.title }}
</div>
</label>
</div>
</template>
注意事项
- 如果卡片内容复杂,建议将卡片封装为独立组件,通过
emits传递选中事件。 - 对于大量卡片,考虑使用
v-show替代v-if避免频繁 DOM 操作。 - 单选逻辑也可通过计算属性实现验证,例如限制必须选择一项。
以上方法可根据实际项目需求调整,核心是通过响应式数据驱动视图更新,实现单选交互效果。







