公告栏

此网站主题为本人手写主题, 主题待开源···

音乐盒

站点信息

文章总数目: 307
已运行时间: 1166
目录
尼采般地抒情

尼采般地抒情

尼采般地抒情

公告栏

此网站主题为本人手写主题, 主题待开源···

站点信息

文章总数目: 307
已运行时间: 1166

编写一个ButtonGroup组件要求支持 单选、多选

<template>
<div style="text-align: center">
  <div>
    <p>选择butonGroup的单选/多选类型:</p>
    <label>单选<input type="radio" v-model="gender" value="single" @click="clickSingleMulti"/></label>
    <label>多选<input type="radio" v-model="gender" value="multi" @click="clickSingleMulti" /></label>
    <p>已选类型:{{gender === 'single' ? '单选' : gender === 'multi' ? '多选' : ''}}</p>
  </div>
  <hr>
  <div v-for="item, index in button_items">
    <button @click="clickFun(item, $event)" :selected='item.select' :disabled="gender === ''">
      {{item.title}}
    </button>
  </div>
</div>

</template>


<script setup lang="ts">
import { reactive, ref } from 'vue'

interface ButtonItemsInterface {
  id: number
  title: string
  select: boolean
}

let button_items: ButtonItemsInterface[] = reactive([
  {
    id: 1,
    title: '选项1',
    select: false
  },
  {
    id: 2,
    title: '选项2',
    select: false
  },
  {
    id: 3,
    title: '选项3',
    select: false
  },
])
let result: any[] = reactive([])
let gender = ref('')
// 置空函数,当切换单选多选,置空result数组
const clickSingleMulti = () => {
  result = []
}
const clickFun = (item: any, e: any) => {
  if (gender.value === 'multi') {    
    if (e.target.getAttribute('selected') === 'true') {
        // 被选中
        let index = result.indexOf(item.id)
        if (index > -1) {
            result.splice(index,1);
        }
    } else {
        // 未被选中
        result.push(item.id)
    }
    item.select = !item.select
    console.log('单选选择的结果:', result)
  } else {
    result = []
    result.push(item.id)
    console.log('多选选择的结果:', result)
  }

}
</script>



<style scoped>
button[selected=true] {
    color: red;
}
</style>

评论区

Twikoo giscus