uniapp实现单选框

采用uniapp-vue3实现的一款单选框组件,提供丝滑的动画选中效果,支持不同主题配置,适配web、H5、微信小程序(其他平台小程序未测试过,可自行尝试)

可到插件市场下载尝试: https://ext.dcloud.net.cn/plugin?id=16821

  • 使用示例
    请添加图片描述

  • 示例代码

<template>
	<view>
		<view class="light" style="background-color: white">
			<wo-radio v-model:options="state.items" v-model:defaultValue="state.default" @on-change="changeEvent">
			</wo-radio>
		</view>
		<view class="light">
			<wo-radio v-model:options="state.items" v-model:defaultValue="state.default" v-model:styleObj="state.theme.light" v-slot="slotProps" @on-change="changeEvent">
				<view style="display: flex;">
					<view>{{ slotProps.data.name }}</view>
					<view class="tag">{{ slotProps.data.tag }}</view>
				</view>
			</wo-radio>
		</view>
		<view class="dark">
			<wo-radio v-model:options="state.items" v-model:defaultValue="state.default" v-model:styleObj="state.theme.dark" v-slot="slotProps" @on-change="changeEvent">
				<view style="display: flex;">
					<view>{{ slotProps.data.name }}</view>
					<view class="tag">{{ slotProps.data.tag }}</view>
				</view>
			</wo-radio>
		</view>
	</view>
	
</template>

<script setup lang="ts">
	import { reactive } from 'vue';
	const state = reactive({
	  items: [{
				value: '1',
				name: '苹果味',
				tag: '饮料'
			},
			{
				value: '2',
				name: '香蕉味',
				tag: '酒水'
			},
			{
				value: '3',
				name: '火龙果味',
				tag: '饮料'
			},
			{
				value: '4',
				name: '西瓜味',
				tag: '饮料'
			},
			{
				value: '5',
				name: '哈密瓜味',
				tag: '酒水'
			},
			{
				value: '6',
				name: '榴莲味',
				tag: '酒水'
		}],
		default: '2',
		theme: {
				light: {
					primary: 'blue',
					unselectedRadioBg: '#eaeaea',
					selectedBg: 'hsla(0,0%,100%,0.5)',
					height: 20
				},
				dark: {
					primary: 'blue',
					unselectedRadioBg: 'hsl(223,90%,30%)',
					selectedBg: 'hsla(223,90%,30%,0.5)',
					height: 20
				}
		},
		height: 12
	});
	const changeEvent = (el) => {
		console.log('点击:', el);
	}
</script>

<style lang="scss" scoped>
	.light {
		border-radius: 10px;
		padding: 20rpx;
		font-size: 24rpx;
		background-color: hsl(223,90%,90%);
		margin: 20px;
		height: 300px;
		overflow: auto;
	}
	.dark {
		border-radius: 10px;
		padding: 20rpx;
		font-size: 24rpx;
		background-color: hsl(223,90%,10%);
		color: white;
		margin: 20px;
		height: 300px;
		overflow: auto;
	}
	.tag {
		background-color: #1BA035;
		color: white;
		font-size: 10px;
		display: flex;
		align-items: center;
		justify-content: center;
		border-radius: 4px;
		padding: 0 4px;
		margin-left: 5px;
	}
</style>


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
uniapp单选框可以通过使用radio组件来实现。在模拟实现多选框的思路中,可以使用radio组件来创建单选框。你需要为每个选项创建一个label标签,并在其中使用radio组件,同时使用v-for指令遍历radioGroup数组来生成选项。在label标签中,你可以使用:value绑定值来指定radio组件的值,并使用:checked属性来判断当前选项是否被选中。当单选按钮发生改变时,可以通过@change事件来调用对应的方法来处理选中值的变化。在方法中,可以通过e.detail.value获取选中的值,并将其赋值给activeRadio变量。以下是一个示例代码: ``` <template> <view> <radio-group @change="chang"> <label v-for="item in radioGroup" :key="item"> <radio :value="item" :checked="item==activeRadio" />{{item}} </label> </radio-group> </view> </template> <script> export default { data() { return { activeRadio: '', radioGroup: ['苹果', '香蕉', '梨', '西红柿', '西瓜'] } }, methods: { chang(e) { this.activeRadio = e.detail.value; console.log(this.activeRadio); } } } </script> ``` 在实际场景中,比如男女单选框,你可以使用radio-group组件,并为每个选项创建一个label标签。在label标签中,使用radio组件来表示选项,并通过:value绑定值来指定radio组件的值。通过:checked属性来判断当前选项是否被选中。当单选按钮发生改变时,可以使用@change事件来调用对应的方法来处理选中值的变化。以下是一个示例代码: ``` <template> <radio-group @change="radioChange"> <label class="radio"> <radio style="zoom: 0.8;" :color="roleColor" value="1" :checked="sex == '1'" />男 </label> <label class="radio" style="margin-left: 15%;"> <radio style="zoom: 0.8;" :color="roleColor" value="2" :checked="sex == '2'" />女 </label> </radio-group> </template> <script> export default { data() { return { sex: "", } }, methods: { radioChange(evt) { this.sex = evt.detail.value; }, } } </script> ``` 这样,你就可以通过使用uniapp的radio组件来创建单选框了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狼性书生

谢谢鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值