vue组件单选框的封装
时间: 2023-11-04 16:05:38 浏览: 171
单选框是前端展现数据字典的一种形式,下拉列表、单选按钮组和复选框组都可以实现。下拉列表是最常用的,但是单选按钮组也是一种常用的形式。下面介绍一下Vue组件单选框的封装方法。
单选框组件的封装需要考虑以下几个方面:
1. 组件的props需要包含一个list属性,用于传递选项列表。
2. 组件的props需要包含一个modelValue属性,用于传递当前选中的值。
3. 组件需要在点击选项时,通过emit事件将选中的值传递给父组件。
4. 组件需要在选项列表中循环渲染每个选项,并且根据当前选中的值来设置选项的样式。
下面是一个简单的单选框组件的实现:
<<引用>>
子组件:
<template>
<div class="radio-group">
<div v-for="(item, index) in props.list" :key="index" class="radio-item" :class="{active: item.value === props.modelValue}" @click="handleClick(item.value)">
<span>{{ item.label }}</span>
</div>
</div>
</template>
<script setup lang="ts">
import { defineProps, defineEmits } from 'vue'
const props = defineProps({
list: {
type: Array,
required: true
},
modelValue: {
type: [String, Number],
required: true
}
})
const emit = defineEmits(['update:modelValue'])
const handleClick = (value: string | number) => {
emit('update:modelValue', value)
}
</script>
<style scoped>
.radio-group {
display: flex;
flex-wrap: wrap;
}
.radio-item {
margin-right: 10px;
margin-bottom: 10px;
padding: 8px 16px;
font-size: 14px;
background-color: #f6f7f9;
border: 1px solid #f6f7f9;
cursor: pointer;
}
.radio-item.active {
background-color: var(--cp-plain);
border-color: var(--cp-primary);
}
</style>
在父组件中使用该组件时,只需要传递一个选项列表和一个modelValue属性即可。例如:
<template>
<div>
<radio-group :list="options" v-model="selected"></radio-group>
</div>
</template>
<script>
import RadioGroup from './RadioGroup.vue'
export default {
components: {
RadioGroup
},
data() {
return {
options: [
{ label: '选项1', value: '1' },
{ label: '选项2', value: '2' },
{ label: '选项3', value: '3' }
],
selected: '1'
}
}
}
</script>
阅读全文