当前位置:首页 > VUE

vue实现列表单选

2026-01-20 13:29:02VUE

实现列表单选的方法

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

使用v-model绑定单选值

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

<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绑定值。

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

vue 实现列表

vue 实现列表

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

vue实现商品列表

vue实现商品列表

Vue实现商品列表的方法 使用Vue实现商品列表需要结合数据绑定、组件化和状态管理。以下是实现商品列表的几种常见方法: 基础数据绑定实现 在Vue组件中定义商品数据数组,使用v-for指令循环渲染商…

vue实现无线滚动列表

vue实现无线滚动列表

无限滚动列表的实现方法 无限滚动列表通常用于展示大量数据,通过动态加载数据减少初始渲染压力。以下是基于Vue的实现方法: 使用Intersection Observer API监听滚动 Inter…

vue公共列表的实现

vue公共列表的实现

Vue 公共列表的实现方法 在 Vue 中实现公共列表组件,可以通过封装可复用的逻辑和模板来完成。以下是几种常见的实现方式: 使用 props 和 slots 通过 props 接收列表数据,使用…

vue实现 单选

vue实现 单选

实现 Vue 单选功能 在 Vue 中实现单选功能可以通过多种方式完成,常见的有使用原生 HTML 的 <input type="radio"> 结合 Vue 的数据绑定,或使用第三方 U…