当前位置:首页 > VUE

vue穿梭框实现

2026-02-11 09:16:57VUE

Vue穿梭框实现方法

Vue穿梭框(Transfer)是一种常见的前端组件,用于在两个列表之间移动数据项。以下是几种实现方式:

使用Element UI的Transfer组件

Element UI提供了现成的Transfer组件,适用于Vue 2.x项目:

<template>
  <el-transfer
    v-model="selectedData"
    :data="sourceData"
    :titles="['Source', 'Target']"
    @change="handleChange">
  </el-transfer>
</template>

<script>
export default {
  data() {
    return {
      sourceData: [
        { key: 1, label: 'Option 1' },
        { key: 2, label: 'Option 2' }
      ],
      selectedData: []
    }
  },
  methods: {
    handleChange(value, direction, movedKeys) {
      console.log(value, direction, movedKeys)
    }
  }
}
</script>

使用Ant Design Vue的Transfer组件

Ant Design Vue也提供了Transfer组件,适用于Vue 3.x项目:

<template>
  <a-transfer
    v-model:target-keys="targetKeys"
    :data-source="dataSource"
    :render="item => item.title"
    @change="handleChange"
  />
</template>

<script setup>
import { ref } from 'vue'

const targetKeys = ref([])
const dataSource = ref([
  { key: '1', title: 'Option 1' },
  { key: '2', title: 'Option 2' }
])

const handleChange = (nextTargetKeys, direction, moveKeys) => {
  console.log(nextTargetKeys, direction, moveKeys)
}
</script>

自定义实现穿梭框

如果需要完全自定义,可以手动实现:

<template>
  <div class="transfer-container">
    <div class="list left-list">
      <div v-for="item in leftItems" :key="item.id" class="item">
        <input type="checkbox" v-model="item.checked">
        {{ item.label }}
      </div>
    </div>

    <div class="actions">
      <button @click="moveToRight">→</button>
      <button @click="moveToLeft">←</button>
    </div>

    <div class="list right-list">
      <div v-for="item in rightItems" :key="item.id" class="item">
        <input type="checkbox" v-model="item.checked">
        {{ item.label }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      leftItems: [
        { id: 1, label: 'Item 1', checked: false },
        { id: 2, label: 'Item 2', checked: false }
      ],
      rightItems: []
    }
  },
  methods: {
    moveToRight() {
      this.rightItems = [
        ...this.rightItems,
        ...this.leftItems.filter(item => item.checked)
      ]
      this.leftItems = this.leftItems.filter(item => !item.checked)
    },
    moveToLeft() {
      this.leftItems = [
        ...this.leftItems,
        ...this.rightItems.filter(item => item.checked)
      ]
      this.rightItems = this.rightItems.filter(item => !item.checked)
    }
  }
}
</script>

<style>
.transfer-container {
  display: flex;
}
.list {
  width: 200px;
  border: 1px solid #ddd;
  padding: 10px;
}
.actions {
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 0 10px;
}
</style>

实现功能增强

对于更复杂的需求,可以添加以下功能:

  • 搜索过滤功能
  • 全选/全不选
  • 拖拽排序
  • 分页加载
<template>
  <div class="transfer-container">
    <div class="list">
      <input v-model="leftSearch" placeholder="Search...">
      <button @click="selectAllLeft">Select All</button>
      <!-- 列表内容 -->
    </div>

    <div class="actions">
      <!-- 操作按钮 -->
    </div>

    <div class="list">
      <input v-model="rightSearch" placeholder="Search...">
      <button @click="selectAllRight">Select All</button>
      <!-- 列表内容 -->
    </div>
  </div>
</template>

以上方法可以根据项目需求选择合适的实现方式,UI库提供的组件更快速高效,自定义实现则更加灵活可控。

vue穿梭框实现

标签: vue
分享给朋友:

相关文章

vue实现目录

vue实现目录

Vue 实现目录功能 在 Vue 中实现目录功能通常需要动态生成目录结构,并支持点击跳转到对应内容区域。以下是几种常见实现方式: 基于滚动监听和动态生成 安装依赖(如需): npm inst…

vue实现下拉框删除

vue实现下拉框删除

Vue 实现下拉框删除功能 在Vue中实现下拉框的删除功能通常涉及以下步骤: 数据绑定与渲染 在Vue组件中定义数据数组用于存储下拉框选项: data() { return {…

vue实现倒计时抢券

vue实现倒计时抢券

Vue 实现倒计时抢券功能 核心逻辑 倒计时抢券功能需要结合时间计算、状态管理和界面交互。通过 Vue 的响应式特性和生命周期钩子,可以高效实现这一需求。 实现步骤 1. 数据准备 在 Vue 组…

vue实现轮询

vue实现轮询

实现轮询的基本方法 在Vue中实现轮询可以通过setInterval或setTimeout配合递归调用完成。轮询通常用于定期向服务器请求数据更新。 使用setInterval的简单示例: data…

vue实现同步

vue实现同步

Vue 实现同步的方法 在 Vue 中实现同步操作通常涉及数据绑定、状态管理和异步操作的处理。以下是几种常见的方法: 使用计算属性(Computed Properties) 计算属性基于响应式依赖进…

vue实现switch

vue实现switch

Vue 实现 Switch 开关组件 在 Vue 中实现 Switch 开关组件可以通过自定义组件或使用现有 UI 库完成。以下是几种常见实现方式: 自定义 Switch 组件 创建一个基础 Sw…