Uniapp 单选 / 多选怎么实现

在Uniapp中实现单选和多选功能,主要使用<radio-group><checkbox-group>组件。以下是具体实现方法和数据绑定示例:

一、单选实现 (radio-group)

核心步骤

  1. 使用<radio-group>包裹多个<radio>
  2. 通过@change事件获取选中值
  3. 使用value绑定选项值
<template>
  <view>
    <radio-group @change="handleRadioChange">
      <label v-for="item in radioList" :key="item.value">
        <radio :value="item.value" :checked="item.checked" /> 
        {{ item.label }}
      </label>
    </radio-group>
    <view>当前选中: {{ radioValue }}</view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      radioValue: '', // 存储选中值
      radioList: [
        { label: '选项A', value: 'A', checked: false },
        { label: '选项B', value: 'B', checked: false },
        { label: '选项C', value: 'C', checked: false }
      ]
    }
  },
  methods: {
    handleRadioChange(e) {
      this.radioValue = e.detail.value;
      // 更新选中状态
      this.radioList.forEach(item => {
        item.checked = item.value === e.detail.value;
      });
    }
  }
}
</script>

二、多选实现 (checkbox-group)

核心步骤

  1. 使用<checkbox-group>包裹多个<checkbox>
  2. 通过@change事件获取选中数组
  3. 使用value绑定选项值
<template>
  <view>
    <checkbox-group @change="handleCheckboxChange">
      <label v-for="item in checkboxList" :key="item.value">
        <checkbox :value="item.value" :checked="item.checked" /> 
        {{ item.label }}
      </label>
    </checkbox-group>
    <view>当前选中: {{ checkboxValues.join(', ') }}</view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      checkboxValues: [], // 存储选中值数组
      checkboxList: [
        { label: '苹果', value: 'apple', checked: false },
        { label: '香蕉', value: 'banana', checked: false },
        { label: '橙子', value: 'orange', checked: false }
      ]
    }
  },
  methods: {
    handleCheckboxChange(e) {
      this.checkboxValues = e.detail.value;
      // 更新选中状态
      this.checkboxList.forEach(item => {
        item.checked = e.detail.value.includes(item.value);
      });
    }
  }
}
</script>

三、关键要点说明

  1. 数据绑定

    • 单选:绑定单个值 radioValue
    • 多选:绑定值数组 checkboxValues
  2. 状态同步

    • @change事件中更新数据源中的checked状态
    • 使用v-for动态渲染选项列表
  3. 样式优化建议

    /* 添加间距 */
    label {
      display: block;
      margin: 10px 0;
    }
    /* 自定义选中样式 */
    radio, checkbox {
      transform: scale(0.8);
      margin-right: 5px;
    }
    

  4. 注意事项

    • H5端需添加<label>标签确保点击文字可触发选择
    • 小程序端需设置<radio><checkbox>color属性自定义颜色
    • 动态修改选中状态时,直接修改数据源而非操作DOM

实际开发中,建议将选项数据存储在Vuex中实现跨组件状态管理,对于复杂表单可使用uni-forms组件进行集成验证。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值