当前位置:首页 > VUE

vue实现列表单选

2026-02-21 05:26:54VUE

实现列表单选的基本思路

在Vue中实现列表单选功能,可以通过v-model绑定选中项,结合v-for渲染列表项。核心是维护一个响应式变量存储当前选中的值,并通过点击事件更新该变量。

基础实现代码示例

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

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

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

使用单选框(input radio)的实现方式

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

对象类型选项的处理

当选项是对象而非简单值时,可以使用v-model绑定整个对象:

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

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

使用计算属性优化

可以通过计算属性判断当前是否选中,使模板更简洁:

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

<script>
export default {
  computed: {
    isSelected() {
      return (id) => this.selected === id
    }
  }
}
</script>

组件化实现

对于复用场景,可以封装为单选列表组件:

<!-- RadioList.vue -->
<template>
  <div>
    <div 
      v-for="item in items" 
      :key="item[valueKey]"
      @click="$emit('update:modelValue', item[valueKey])"
      :class="{ 'active': modelValue === item[valueKey] }"
    >
      {{ item[textKey] }}
    </div>
  </div>
</template>

<script>
export default {
  props: {
    items: Array,
    modelValue: [String, Number],
    valueKey: {
      type: String,
      default: 'id'
    },
    textKey: {
      type: String,
      default: 'text'
    }
  },
  emits: ['update:modelValue']
}
</script>

使用方式:

vue实现列表单选

<radio-list 
  v-model="selectedId"
  :items="list"
/>

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

相关文章

vue 实现单选全选

vue 实现单选全选

实现单选和全选功能 在Vue中实现单选和全选功能,可以通过v-model指令绑定数据,结合计算属性和方法来实现交互逻辑。以下是一个完整的实现方案。 基础数据结构 定义列表数据,每个数据项包含选中状态…

vue实现列表demo

vue实现列表demo

以下是一个基于 Vue.js 的列表实现示例,包含基础功能与关键代码解析: 基础列表渲染 <template> <div> <ul> &l…

vue实现列表翻页

vue实现列表翻页

Vue 列表翻页实现方法 基础分页实现 在 Vue 中实现列表翻页通常需要结合分页组件和数据请求。使用 Element UI 的分页组件可以快速实现: <template>…

vue 实现列表全选

vue 实现列表全选

实现列表全选功能 在Vue中实现列表全选功能,可以通过绑定数据和事件处理来实现。以下是一个完整的示例代码: <template> <div> <input…

vue 实现图片列表

vue 实现图片列表

实现图片列表的基本方法 在Vue中实现图片列表可以通过v-for指令动态渲染图片数据。需要准备一个包含图片信息的数组,并通过v-for循环渲染到模板中。 <template> <…

vue实现单选功能

vue实现单选功能

使用 <input type="radio"> 实现单选 在 Vue 中可以通过 v-model 绑定单选按钮组的值,确保同一组单选按钮的 name 属性相同。 <template…