当前位置:首页 > VUE

vue实现列表单选

2026-01-20 13:29:02VUE

实现列表单选的方法

在Vue中实现列表单选功能,可以通过多种方式完成。以下是几种常见的实现方法:

使用v-model绑定单选值

通过v-model绑定一个变量来存储当前选中的项,结合v-for渲染列表项,利用radio或自定义样式实现单选效果。

vue实现列表单选

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

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

<style>
.active {
  background-color: #eee;
}
</style>

使用原生radio输入

利用HTML原生radio输入元素实现单选功能,通过v-model绑定值。

vue实现列表单选

<template>
  <div>
    <div v-for="item in list" :key="item.id">
      <input 
        type="radio" 
        :id="'option-' + item.id" 
        :value="item.id" 
        v-model="selected"
      >
      <label :for="'option-' + item.id">{{ item.name }}</label>
    </div>
  </div>
</template>

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

使用计算属性管理选中状态

通过计算属性来管理选中状态,提供更灵活的控制。

<template>
  <div>
    <div 
      v-for="item in list" 
      :key="item.id"
      @click="selectItem(item)"
      :class="{ 'active': isSelected(item) }"
    >
      {{ item.name }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      list: [
        { id: 1, name: '选项1' },
        { id: 2, name: '选项2' },
        { id: 3, name: '选项3' }
      ],
      selectedItem: null
    }
  },
  methods: {
    selectItem(item) {
      this.selectedItem = item
    },
    isSelected(item) {
      return this.selectedItem && this.selectedItem.id === item.id
    }
  }
}
</script>

注意事项

  • 确保为每个列表项设置唯一的key值
  • 根据需求选择合适的实现方式(自定义样式或原生radio)
  • 单选功能通常需要配合样式来直观显示选中状态
  • 在复杂场景中,可以考虑使用Vuex或provide/inject来管理选中状态

扩展实现

对于更复杂的需求,可以创建一个可复用的单选列表组件:

<template>
  <div class="radio-list">
    <div 
      v-for="item in items" 
      :key="item[keyProp]"
      class="radio-item"
      :class="{ 'active': isActive(item) }"
      @click="selectItem(item)"
    >
      <slot :item="item">
        {{ item[labelProp] }}
      </slot>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    items: {
      type: Array,
      required: true
    },
    value: {
      type: [Object, String, Number],
      default: null
    },
    keyProp: {
      type: String,
      default: 'id'
    },
    labelProp: {
      type: String,
      default: 'name'
    }
  },
  methods: {
    selectItem(item) {
      this.$emit('input', item)
    },
    isActive(item) {
      if (!this.value) return false
      return this.value[this.keyProp] === item[this.keyProp]
    }
  }
}
</script>

这种方式提供了更大的灵活性,支持插槽和自定义属性名。

标签: 单选列表
分享给朋友:

相关文章

vue 实现图片单选

vue 实现图片单选

Vue 实现图片单选功能 在 Vue 中实现图片单选功能,可以通过结合 v-model 和自定义事件来实现。以下是具体实现方法: 方法一:使用 v-model 和计算属性 创建一个 Vue 组件…

vue 实现组单选

vue 实现组单选

Vue 实现单选组 在 Vue 中实现单选组可以通过多种方式,以下是几种常见的实现方法: 使用 v-model 绑定单选按钮组 通过 v-model 绑定一个变量,单选按钮的 value 属性对应…

vue实现列表过渡

vue实现列表过渡

vue实现列表过渡的方法 在Vue中,可以使用内置的<transition-group>组件来实现列表项的过渡效果。该组件专门为动态列表设计,能够处理元素的添加、删除和顺序变化。…

vue实现列表页面

vue实现列表页面

Vue 列表页面实现方案 基础列表渲染 使用 v-for 指令渲染数组数据,配合 :key 提升性能: <template> <ul> <li v-for=…

vue实现虚拟列表

vue实现虚拟列表

虚拟列表的概念 虚拟列表(Virtual List)是一种优化长列表渲染性能的技术,通过仅渲染可视区域内的元素,减少DOM节点数量,从而提升页面性能。适用于数据量大的场景(如表格、下拉选择器等)。…

vue实现列表展示

vue实现列表展示

Vue 实现列表展示 在 Vue 中实现列表展示通常使用 v-for 指令,结合数据绑定和动态渲染功能。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 指令遍历数组,动态生成列表项。假…