当前位置:首页 > 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绑定整个对象:

vue实现列表单选

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

使用计算属性优化

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

vue实现列表单选

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

使用方式:

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

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

相关文章

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

vue实现单选按钮

vue实现单选按钮

实现单选按钮的基本方法 在Vue中实现单选按钮通常使用v-model指令绑定数据,结合input元素的type="radio"属性。以下是一个基础示例: <template> <…

jquery列表

jquery列表

jQuery 列表操作 jQuery 提供了多种方法来操作 HTML 列表(如 <ul> 或 <ol>),包括动态添加、删除、修改列表项,以及事件绑定等。 创建列表 使用 j…

vue实现单选弹窗

vue实现单选弹窗

Vue 实现单选弹窗的方法 使用 Element UI 的 Dialog 和 Radio 组件 安装 Element UI 后,可以通过 Dialog 和 Radio 组件快速实现单选弹窗功能。…

vue实现单选状态

vue实现单选状态

实现单选状态的方法 在Vue中实现单选状态通常可以通过以下几种方式完成,具体取决于使用场景和需求。 使用v-model绑定单选按钮 通过v-model可以轻松实现单选按钮的选择状态绑定。将同一组单选…

vue实现列表滚动

vue实现列表滚动

Vue 实现列表滚动的方法 使用 CSS 实现滚动 通过 CSS 的 overflow 属性可以轻松实现列表滚动。在 Vue 的模板中,为列表容器添加 overflow-y: auto 或 overf…