<template> <view class="u-demo"> <view class="u-demo-wrap"> <view class="u-demo-title">演示效果</view> <view class="u-demo-area"> <view class=""> <u-radio-group :shape="shape" :size="size" :width="width" :wrap="wrap" v-model="value" @change="radioGroupChange" :activeColor="activeColor"> <u-radio @change="radioChange" v-for="(item, index) in list" :disabled="item.disabled" :key="index" :name="item.name" >{{item.name}}</u-radio> </u-radio-group> </view> <view class="u-demo-result-line"> {{value ? `选中了"${result}"` : '请选择'}} </view> </view> </view> <view class="u-config-wrap"> <view class="u-config-title u-border-bottom"> 参数配置 </view> <view class="u-config-item"> <view class="u-item-title">形状</view> <u-subsection current="1" :list="['方形', '圆形']" @change="shapeChange"></u-subsection> </view> <view class="u-config-item"> <view class="u-item-title">整体大小(单位rpx)</view> <u-subsection current="1" :list="['30', '40', '50']" @change="sizeChange"></u-subsection> </view> <view class="u-config-item"> <view class="u-item-title">激活颜色</view> <u-subsection :list="['primary', 'error', 'warning', 'success', 'info']" @change="activeColorChange"></u-subsection> </view> <view class="u-config-item"> <view class="u-item-title">每个占一行</view> <u-subsection current="1" :list="['是', '否']" @change="wrapChange"></u-subsection> </view> <view class="u-config-item"> <view class="u-item-title">每个宽度50%</view> <u-subsection current="1" :list="['是', '否']" @change="widthChange"></u-subsection> </view> <view class="u-config-item"> <view class="u-item-title">默认选中第一个</view> <u-subsection current="1" :list="['是', '否']" @change="defaultChooseChange"></u-subsection> </view> <view class="u-config-item"> <view class="u-item-title">禁用第一个</view> <u-subsection current="1" :list="['是', '否']" @change="disabledChange"></u-subsection> </view> </view> </view> </template> <script> export default { data() { return { list: [ { name: '荔枝', checked: true, disabled: false }, { name: '香蕉', checked: false, disabled: false }, { name: '橙子', checked: false, disabled: false }, { name: '草莓', checked: false, disabled: false } ], disabled: false, result: '荔枝', shape: 'circle', value: '荔枝', activeColor: '#2979ff', size: 34, wrap: false, width: 'auto' } }, methods: { shapeChange(index) { this.shape = index == 0 ? 'square' : 'circle'; }, sizeChange(index) { this.size = index == 0 ? 30 : index == 1 ? 40 : 50; }, defaultChooseChange(index) { // 特别处理对第一个选的选中的情况,涉及到提示语,选中状态等 // 实际开发中不会存在这些情况,只是演示用 if(index == 0) { this.result = this.value = this.list[0].name; } else { if(this.value == this.list[0].name) { this.result = this.value = ''; } } }, activeColorChange(index) { // 如果用户尚未勾选任何radio,切换颜色时,默认选中第一个让用户看到效果,因为勾选了才有效果 if(!this.result) this.result = this.value = this.list[0].name; let theme = index == 0 ? 'primary' : index == 1 ? 'error' : index == 2 ? 'warning' : index == 3 ? 'success' : 'info'; this.activeColor = this.$u.color[theme]; }, disabledChange(index) { if(index == 0) { this.list[0].disabled = true; } else { this.list[0].disabled = false; } }, // 选中某个单选框时,由radio时触发 radioChange(e) { //console.log(e); }, // 选中任一radio时,由radio-group触发 radioGroupChange(e) { this.result = e; //console.log(e); }, widthChange(index) { this.width = index == 0 ? '50%' : ''; }, wrapChange(index) { this.wrap = !index; } } } </script> <style scoped lang="scss"> .u-demo {} </style>