当前位置:首页 > VUE

vue实现div单选

2026-02-10 20:54:33VUE

Vue实现Div单选的方法

使用v-model和v-for

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

<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>

使用计算属性

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

<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实现div单选

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

相关文章

vue实现网页切换

vue实现网页切换

Vue 实现网页切换的方法 在 Vue 中实现网页切换通常可以通过以下几种方式完成,具体取决于项目需求和路由管理方式。 使用 Vue Router Vue Router 是 Vue.js 官方提供的…

vue实现好友列表

vue实现好友列表

实现好友列表的Vue组件 数据准备 在Vue组件的data中定义好友列表数据,通常是一个数组对象,每个对象包含好友的基本信息如ID、头像、昵称等。 data() { return {…

vue实现发表

vue实现发表

Vue 实现发表功能 在 Vue 中实现发表功能通常涉及表单处理、数据绑定和网络请求。以下是实现步骤和代码示例: 表单设计与数据绑定 创建一个表单用于输入发表内容,使用 v-model 进行数据双…

vue架构实现

vue架构实现

Vue 架构实现核心方案 Vue.js 的架构实现通常围绕模块化、组件化和状态管理展开。以下为常见实现方案: 基于单文件组件(SFC)的模块化 通过 .vue 文件组织模板、脚本和样式: &l…

vue实现token

vue实现token

Vue 中实现 Token 认证的方法 在 Vue 中实现 Token 认证通常涉及前端与后端的交互,包括 Token 的获取、存储、发送和刷新等操作。以下是具体实现步骤: 获取 Token 用户登…

vue课程实现

vue课程实现

Vue 课程实现方案 课程内容设计 Vue课程应从基础到高级逐步展开,涵盖Vue核心概念、组件化开发、状态管理、路由、构建工具等。基础部分包括Vue实例、模板语法、计算属性和侦听器。中级部分深入组件通…