当前位置:首页 > VUE

vue实现div单选

2026-02-10 20:54:33VUE

Vue实现Div单选的方法

使用v-model和v-for

通过v-model绑定选中的值,结合v-for循环渲染选项,利用CSS类动态切换选中样式。

vue实现div单选

<template>
  <div>
    <div 
      v-for="option in options" 
      :key="option.value"
      @click="selected = option.value"
      :class="{ 'active': selected === option.value }"
    >
      {{ option.label }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selected: null,
      options: [
        { value: 1, label: '选项1' },
        { value: 2, label: '选项2' },
        { value: 3, label: '选项3' }
      ]
    }
  }
}
</script>

<style>
.active {
  background-color: #409EFF;
  color: white;
}
</style>

使用计算属性

通过计算属性处理选中状态,适合需要复杂逻辑的场景。

vue实现div单选

<template>
  <div>
    <div 
      v-for="option in options"
      :key="option.value"
      @click="toggleSelect(option.value)"
      :class="getClass(option.value)"
    >
      {{ option.label }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selected: null,
      options: [
        { value: 'a', label: '选项A' },
        { value: 'b', label: '选项B' }
      ]
    }
  },
  methods: {
    toggleSelect(value) {
      this.selected = value
    }
  },
  computed: {
    getClass() {
      return (value) => ({
        'active': this.selected === value
      })
    }
  }
}
</script>

使用组件化方式

将单选逻辑封装为可复用组件,通过props传递选项和默认值。

<!-- RadioDiv.vue -->
<template>
  <div class="radio-group">
    <div
      v-for="item in options"
      :key="item.value"
      @click="$emit('update:modelValue', item.value)"
      :class="{ 'selected': modelValue === item.value }"
    >
      {{ item.label }}
    </div>
  </div>
</template>

<script>
export default {
  props: {
    options: Array,
    modelValue: [String, Number]
  },
  emits: ['update:modelValue']
}
</script>

<!-- 使用示例 -->
<template>
  <RadioDiv 
    v-model="selectedOption"
    :options="[
      { value: 'x', label: '选项X' },
      { value: 'y', label: '选项Y' }
    ]"
  />
</template>

使用Vuex状态管理

当需要在多个组件间共享选中状态时,可以采用Vuex管理。

// store.js
export default new Vuex.Store({
  state: {
    selectedDiv: null
  },
  mutations: {
    setSelectedDiv(state, value) {
      state.selectedDiv = value
    }
  }
})

// 组件中使用
<template>
  <div @click="$store.commit('setSelectedDiv', 'div1')"
       :class="{ active: $store.state.selectedDiv === 'div1' }">
    选项1
  </div>
</template>

注意事项

  • 确保每个选项有唯一标识value
  • 样式处理建议使用transition添加动画效果
  • 移动端可添加:active伪类提升点击反馈
  • 复杂场景可结合Vue的自定义指令实现

标签: 单选vue
分享给朋友:

相关文章

vue实现水印

vue实现水印

Vue 实现水印的方法 使用 CSS 背景图 通过 CSS 的 background-image 和 background-repeat 属性实现水印效果。创建一个包含水印文本的 Canvas,将其转…

vue 实现轮播

vue 实现轮播

Vue 实现轮播的方法 使用第三方库(如 Swiper) 安装 Swiper 库: npm install swiper 在 Vue 组件中引入 Swiper: <template>…

vue实现slidetoggle

vue实现slidetoggle

Vue 实现 SlideToggle 效果 SlideToggle 是一种常见的交互效果,元素以滑动方式展开或收起。以下是几种实现方法: 使用 CSS Transition 和 v-show…

vue 实现分屏

vue 实现分屏

Vue 实现分屏的方法 使用 CSS Flexbox 或 Grid 布局 通过 CSS Flexbox 或 Grid 布局可以轻松实现分屏效果。在 Vue 组件中定义两个或多个区域,并使用 CSS 控…

vue实现筛选

vue实现筛选

实现筛选功能的基本思路 在Vue中实现筛选功能通常需要结合数据绑定、计算属性和方法。筛选的核心逻辑是根据用户输入的条件过滤原始数据列表,并动态更新显示结果。 数据准备 定义一个数组存储原始数据,另一…

vue事件实现

vue事件实现

Vue 事件实现方法 在Vue中,事件处理是通过v-on指令或@简写来实现的。以下是几种常见的事件处理方式: 使用v-on指令绑定事件 <button v-on:click="handleC…