当前位置:首页 > 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中实现列表通常使用v-for指令,这是Vue的核心功能之一。v-for可以遍历数组或对象,为每个元素生成对应的DOM节点。 <template> <…

jquery 列表

jquery 列表

jQuery 列表操作 jQuery 提供了多种方法来操作 HTML 列表(如 <ul> 或 <ol>)。以下是一些常见的操作方式: 动态添加列表项 使用 append()…

vue列表怎么实现

vue列表怎么实现

Vue 列表实现方法 使用 v-for 指令 Vue 中列表渲染主要通过 v-for 指令实现,可以遍历数组或对象。 <template> <ul> <li…

vue实现纵向列表

vue实现纵向列表

实现纵向列表的基本方法 在Vue中实现纵向列表可以通过v-for指令结合数组数据渲染。核心是利用循环遍历数据生成列表项,并设置CSS控制纵向排列。 <template> <di…

vue实现产品列表

vue实现产品列表

Vue 实现产品列表的方法 使用 Vue CLI 创建项目 安装 Vue CLI 并初始化项目,确保项目环境配置正确。 npm install -g @vue/cli vue create prod…

vue 实现商品列表

vue 实现商品列表

实现商品列表的基本结构 在Vue中实现商品列表,通常需要创建一个组件来展示商品数据。可以使用v-for指令循环渲染商品列表,并通过数据绑定动态显示商品信息。 <template> &…