当前位置:首页 > 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管理。

vue实现div单选

// 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 实现录播播放 使用 video.js 实现 安装 video.js 和相关的 Vue 适配器: npm install video.js @videojs-player/vue 在 Vue…

vue实现列表显示

vue实现列表显示

Vue 实现列表显示的方法 在 Vue 中实现列表显示通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式。 基本列表渲染 通过 v-for 指令遍历数组,动态生成列…

vue实现画圆弧并着色

vue实现画圆弧并着色

在 Vue 中实现画圆弧并着色 使用 Canvas API 绘制圆弧 在 Vue 组件的 mounted 钩子中,通过 Canvas API 绘制圆弧。创建一个 canvas 元素并获取其上下文:…

vue 实现tabs

vue 实现tabs

Vue 实现 Tabs 组件的方法 使用动态组件和 v-for 在 Vue 中实现 Tabs 可以通过动态组件和 v-for 指令结合完成。定义一个 tabs 数组,包含每个标签的标题和对应的组件。…

vue 实现挂载

vue 实现挂载

Vue 实现挂载的基本方法 在 Vue 中,挂载是将 Vue 实例与 DOM 元素关联的过程。通过挂载,Vue 可以管理 DOM 并实现数据绑定和响应式更新。 创建 Vue 实例并挂载 const…

vue实现picker

vue实现picker

Vue 实现 Picker 组件的方法 在 Vue 中实现 Picker 组件可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 HTML 和 CSS 实现 通过 Vue 的模板和样式绑定,…