当前位置:首页 > VUE

vue实现div单选

2026-03-28 06:57:16VUE

Vue 实现 Div 单选的方法

使用 v-model 和计算属性

通过 v-model 绑定选中的值,结合计算属性动态更新样式。

<template>
  <div>
    <div 
      v-for="item in items" 
      :key="item.id"
      @click="selected = item.id"
      :class="{ 'active': selected === item.id }"
    >
      {{ item.text }}
    </div>
  </div>
</template>

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

<style>
.active {
  background-color: #42b983;
  color: white;
}
</style>

使用自定义组件

封装一个可复用的单选组件,通过 props$emit 实现数据传递。

<template>
  <div>
    <radio-group v-model="selected">
      <radio-item 
        v-for="item in items" 
        :key="item.id" 
        :value="item.id"
      >
        {{ item.text }}
      </radio-item>
    </radio-group>
  </div>
</template>

<script>
import RadioGroup from './RadioGroup.vue'
import RadioItem from './RadioItem.vue'

export default {
  components: { RadioGroup, RadioItem },
  data() {
    return {
      selected: null,
      items: [
        { id: 1, text: '选项1' },
        { id: 2, text: '选项2' },
        { id: 3, text: '选项3' }
      ]
    }
  }
}
</script>

使用第三方库

如果需要更复杂的功能,可以使用如 v-radio 等第三方库。

<template>
  <v-radio-group v-model="selected">
    <v-radio 
      v-for="item in items" 
      :key="item.id" 
      :label="item.text" 
      :value="item.id"
    />
  </v-radio-group>
</template>

<script>
import { VRadioGroup, VRadio } from 'vue-radios'

export default {
  components: { VRadioGroup, VRadio },
  data() {
    return {
      selected: null,
      items: [
        { id: 1, text: '选项1' },
        { id: 2, text: '选项2' },
        { id: 3, text: '选项3' }
      ]
    }
  }
}
</script>

动态样式绑定

通过动态绑定 classstyle 实现选中效果。

<template>
  <div>
    <div 
      v-for="item in items" 
      :key="item.id"
      @click="selected = item.id"
      :style="{
        backgroundColor: selected === item.id ? '#42b983' : '',
        color: selected === item.id ? 'white' : ''
      }"
    >
      {{ item.text }}
    </div>
  </div>
</template>

使用事件总线

跨组件通信时,可以通过事件总线实现单选功能。

vue实现div单选

// event-bus.js
import Vue from 'vue'
export const EventBus = new Vue()
<template>
  <div>
    <div 
      v-for="item in items" 
      :key="item.id"
      @click="selectItem(item.id)"
      :class="{ 'active': selected === item.id }"
    >
      {{ item.text }}
    </div>
  </div>
</template>

<script>
import { EventBus } from './event-bus.js'

export default {
  data() {
    return {
      selected: null,
      items: [
        { id: 1, text: '选项1' },
        { id: 2, text: '选项2' },
        { id: 3, text: '选项3' }
      ]
    }
  },
  methods: {
    selectItem(id) {
      EventBus.$emit('item-selected', id)
    }
  },
  created() {
    EventBus.$on('item-selected', id => {
      this.selected = id
    })
  }
}
</script>

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

相关文章

vue设计与实现下载

vue设计与实现下载

vue设计与实现电子书下载 《Vue.js设计与实现》是一本深入解析Vue.js框架原理的书籍,由霍春阳(HcySunYang)撰写。以下是获取该资源的常见途径: 正版购买渠道 京东、…

vue权限实现

vue权限实现

Vue 权限实现方案 基于路由的权限控制 通过路由守卫实现权限验证,在路由配置中添加meta字段标记权限要求。在router.beforeEach中检查用户权限与路由要求的匹配情况。 // rout…

computed vue 实现

computed vue 实现

computed 在 Vue 中的基本用法 Vue 的 computed 属性用于声明依赖于其他数据的计算属性。当依赖的数据变化时,计算属性会自动重新计算并缓存结果。 export defaul…

vue实现Pop

vue实现Pop

Vue 实现 Popover 组件的方法 使用 Vue 内置指令 v-show/v-if 和事件监听 通过 Vue 的指令和事件绑定实现基础的 Popover 功能。定义一个布尔值控制 Popover…

vue实现vr

vue实现vr

Vue 实现 VR 的方法 Vue 可以与 WebVR 或 WebXR API 结合使用,通过 Three.js、A-Frame 等库实现 VR 效果。以下是几种常见方法: 使用 A-Frame 框…

vue app 实现

vue app 实现

Vue App 实现步骤 创建Vue项目 使用Vue CLI或Vite初始化项目。Vue CLI适合传统项目,Vite适合现代轻量级应用。 npm create vue@latest my-vu…