当前位置:首页 > VUE

vue实现选人

2026-01-13 03:07:19VUE

实现选人功能的基本思路

在Vue中实现选人功能通常涉及以下几个关键点:人员数据管理、选择交互逻辑、选人组件封装以及数据传递。以下是具体实现方法:

数据准备与状态管理

创建人员数据数组,通常包含id、name等字段:

data() {
  return {
    peopleList: [
      { id: 1, name: '张三' },
      { id: 2, name: '李四' },
      { id: 3, name: '王五' }
    ],
    selectedPeople: []
  }
}

基础选择实现

使用v-for渲染人员列表,配合v-model或事件处理实现选择:

<div v-for="person in peopleList" :key="person.id">
  <input 
    type="checkbox" 
    :value="person.id" 
    v-model="selectedPeople"
  >
  {{ person.name }}
</div>

组件化封装

创建可复用的选人组件PersonSelector.vue:

vue实现选人

<template>
  <div class="person-selector">
    <div 
      v-for="person in list" 
      :key="person.id"
      @click="toggleSelect(person)"
      :class="{ selected: isSelected(person) }"
    >
      {{ person.name }}
    </div>
  </div>
</template>

<script>
export default {
  props: ['list', 'value'],
  methods: {
    toggleSelect(person) {
      const selected = [...this.value]
      const index = selected.findIndex(p => p.id === person.id)

      index === -1 
        ? selected.push(person) 
        : selected.splice(index, 1)

      this.$emit('input', selected)
    },
    isSelected(person) {
      return this.value.some(p => p.id === person.id)
    }
  }
}
</script>

使用组件

父组件中使用并绑定选人数据:

<person-selector 
  :list="peopleList" 
  v-model="selectedPeople"
></person-selector>

高级功能扩展

实现搜索过滤功能:

vue实现选人

computed: {
  filteredList() {
    return this.peopleList.filter(person => 
      person.name.includes(this.searchKey)
    )
  }
}

添加多选/单选模式支持:

props: {
  mode: {
    type: String,
    default: 'multiple', // 或'single'
    validator: value => ['multiple', 'single'].includes(value)
  }
}

与后端交互

实现异步加载人员数据:

async loadPeople() {
  try {
    const res = await axios.get('/api/people')
    this.peopleList = res.data
  } catch (error) {
    console.error('加载人员列表失败', error)
  }
}

样式优化

添加基础交互样式:

.person-selector div {
  padding: 8px;
  cursor: pointer;
}

.person-selector div.selected {
  background-color: #e6f7ff;
  border-left: 3px solid #1890ff;
}

以上实现方案可根据实际需求进行组合调整,组件化封装使得选人功能可以在不同场景复用,状态管理确保数据流动清晰,扩展功能满足更多业务场景需求。

标签: 选人vue
分享给朋友:

相关文章

vue响应式实现

vue响应式实现

Vue 响应式实现原理 Vue 的响应式系统基于 Object.defineProperty(Vue 2.x)或 Proxy(Vue 3.x)实现,通过数据劫持和依赖收集实现数据变化时的自动更新。…

vue实现滚动中断

vue实现滚动中断

Vue 实现滚动中断的方法 在 Vue 中实现滚动中断通常涉及监听滚动事件,并在特定条件下阻止默认行为或停止滚动。以下是几种常见方法: 监听滚动事件并阻止默认行为 通过 @scroll 或 @wh…

vue实现视频开场

vue实现视频开场

使用 Vue 实现视频开场动画 在 Vue 中实现视频开场动画可以通过结合 HTML5 的 <video> 标签和 Vue 的过渡效果或生命周期钩子来完成。以下是具体实现方法: 安装依赖…

vue实现访问量

vue实现访问量

Vue 实现访问量统计的方法 使用前端计数 在 Vue 中可以通过简单的计数器实现页面访问量的统计。这种方法适合小型项目或演示用途。 // 在 Vue 组件中 data() { return {…

vue前端实现打印功能

vue前端实现打印功能

使用Vue实现前端打印功能 在Vue项目中实现打印功能可以通过多种方式完成,以下是几种常见的方法: 使用window.print()方法 这是最简单的打印方式,直接调用浏览器的打印功能。 me…

vue实现字母添加排序

vue实现字母添加排序

实现字母添加排序的方法 在Vue中实现字母添加排序功能,可以通过以下步骤完成: 创建Vue实例并定义数据 new Vue({ el: '#app', data: { letters…