当前位置:首页 > VUE

vue穿梭框组件实现

2026-01-07 04:46:29VUE

实现基础穿梭框组件

在Vue中实现穿梭框组件,可以使用<el-transfer>(Element UI)或手动实现。以下是手动实现的核心逻辑:

<template>
  <div class="transfer-container">
    <div class="transfer-panel">
      <h3>源列表</h3>
      <ul>
        <li v-for="item in sourceList" :key="item.value">
          <input type="checkbox" v-model="selectedItems" :value="item.value">
          {{ item.label }}
        </li>
      </ul>
    </div>
    <div class="transfer-buttons">
      <button @click="moveToTarget">→</button>
      <button @click="moveToSource">←</button>
    </div>
    <div class="transfer-panel">
      <h3>目标列表</h3>
      <ul>
        <li v-for="item in targetList" :key="item.value">
          <input type="checkbox" v-model="selectedItems" :value="item.value">
          {{ item.label }}
        </li>
      </ul>
    </div>
  </div>
</template>

数据绑定与状态管理

组件需要维护三个核心数据:

vue穿梭框组件实现

  • 源数据列表
  • 目标数据列表
  • 选中项集合
<script>
export default {
  data() {
    return {
      sourceList: [
        { value: 1, label: '选项1' },
        { value: 2, label: '选项2' }
      ],
      targetList: [],
      selectedItems: []
    }
  },
  methods: {
    moveToTarget() {
      this.targetList = [
        ...this.targetList,
        ...this.sourceList.filter(item => 
          this.selectedItems.includes(item.value)
        )
      ]
      this.sourceList = this.sourceList.filter(item => 
        !this.selectedItems.includes(item.value)
      )
      this.selectedItems = []
    },
    moveToSource() {
      // 反向移动逻辑类似
    }
  }
}
</script>

样式优化与交互增强

添加CSS提升用户体验:

.transfer-container {
  display: flex;
  align-items: center;
  gap: 20px;
}
.transfer-panel {
  border: 1px solid #ddd;
  width: 200px;
  height: 300px;
  overflow-y: auto;
}
.transfer-buttons {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

高级功能实现

支持搜索过滤和全选功能:

vue穿梭框组件实现

<input v-model="searchQuery" placeholder="搜索...">
<button @click="selectAll">全选</button>

<script>
methods: {
  selectAll() {
    this.selectedItems = this.sourceList.map(item => item.value)
  },
  computed: {
    filteredList() {
      return this.sourceList.filter(item => 
        item.label.includes(this.searchQuery)
      )
    }
  }
}
</script>

与Element UI集成

若使用Element UI,可直接使用内置组件:

<el-transfer
  v-model="targetList"
  :data="sourceList"
  :titles="['源列表', '目标列表']"
  :button-texts="['向右移动', '向左移动']"
></el-transfer>

关键点总结:

  • 维护两个独立的数据列表
  • 通过复选框管理选中状态
  • 实现左右移动的数组操作
  • 添加搜索和全选增强体验
  • 考虑使用现成UI库加速开发

标签: 组件vue
分享给朋友:

相关文章

vue实现增删改

vue实现增删改

Vue 实现增删改查功能 Vue.js 是一个流行的前端框架,用于构建用户界面。以下是使用 Vue.js 实现增删改查(CRUD)功能的方法。 数据初始化 在 Vue 实例的 data 中初始化一个…

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed: {…

简单实现vue

简单实现vue

Vue 的基本实现 创建一个简单的 Vue 应用需要引入 Vue 库,并编写基本的模板和数据绑定逻辑。 <!DOCTYPE html> <html lang="en"> &l…

vue实现RTMP

vue实现RTMP

Vue 中实现 RTMP 流播放 RTMP(Real-Time Messaging Protocol)是一种用于实时音视频流传输的协议。在 Vue 中实现 RTMP 播放通常需要借助第三方库或播放器。…

vue 实现打印

vue 实现打印

Vue 实现打印功能的方法 在Vue项目中实现打印功能,可以通过以下几种方式实现: 使用window.print()方法 通过调用浏览器的原生打印API实现基础打印功能,适用于简单内容打印。 //…

vue 实现登录

vue 实现登录

Vue 实现登录功能 创建登录表单组件 在 Vue 项目中创建一个登录表单组件(如 Login.vue),包含用户名和密码输入框以及提交按钮。使用 v-model 实现双向数据绑定。 <tem…