当前位置:首页 > VUE

Vue实现级联多选

2026-03-28 16:49:25VUE

Vue 实现级联多选的方法

使用 Element UI 的 Cascader 组件

Element UI 提供了 el-cascader 组件,支持多选功能。通过设置 propsmultiple 属性为 true 即可启用多选。

<template>
  <el-cascader
    v-model="selectedOptions"
    :options="options"
    :props="{ multiple: true }"
    clearable
  />
</template>

<script>
export default {
  data() {
    return {
      selectedOptions: [],
      options: [
        {
          value: 'guide',
          label: 'Guide',
          children: [
            {
              value: 'disciplines',
              label: 'Disciplines'
            }
          ]
        }
      ]
    }
  }
}
</script>

自定义级联多选组件

如果需要更灵活的定制,可以手动实现级联多选逻辑。通过递归渲染子菜单,并绑定选中状态。

Vue实现级联多选

<template>
  <div>
    <div v-for="item in options" :key="item.value">
      <input 
        type="checkbox" 
        v-model="selectedValues" 
        :value="item.value"
      />
      <span>{{ item.label }}</span>
      <div v-if="item.children" style="margin-left: 20px">
        <cascade-multi-select 
          :options="item.children" 
          v-model="selectedValues"
        />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'CascadeMultiSelect',
  props: {
    options: Array,
    value: Array
  },
  data() {
    return {
      selectedValues: this.value || []
    }
  },
  watch: {
    selectedValues(newVal) {
      this.$emit('input', newVal)
    }
  }
}
</script>

使用第三方库 vue-treeselect

vue-treeselect 是一个功能强大的树形选择组件,支持多选和级联操作。

安装依赖:

Vue实现级联多选

npm install @riophae/vue-treeselect

示例代码:

<template>
  <treeselect
    v-model="value"
    :multiple="true"
    :options="options"
  />
</template>

<script>
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'

export default {
  components: { Treeselect },
  data() {
    return {
      value: null,
      options: [
        {
          id: 'a',
          label: 'a',
          children: [
            { id: 'aa', label: 'aa' }
          ]
        }
      ]
    }
  }
}
</script>

处理异步加载数据

如果级联数据需要异步加载,可以通过 lazy 属性和 lazyLoad 方法实现。

<template>
  <el-cascader
    v-model="selectedOptions"
    :props="props"
  />
</template>

<script>
export default {
  data() {
    return {
      selectedOptions: [],
      props: {
        lazy: true,
        lazyLoad(node, resolve) {
          const { level } = node
          setTimeout(() => {
            const nodes = Array.from({ length: level + 1 })
              .map(() => ({
                value: ++id,
                label: `Option - ${id}`,
                leaf: level >= 2
              }))
            resolve(nodes)
          }, 1000)
        }
      }
    }
  }
}
</script>

注意事项

  • 数据格式需符合组件要求,通常包含 valuelabelchildren 字段。
  • 多选时返回的值通常是数组,需正确处理数据绑定。
  • 对于大型数据集,建议启用异步加载或虚拟滚动优化性能。

标签: 多选级联
分享给朋友:

相关文章

vue实现点击多选

vue实现点击多选

实现点击多选的基本逻辑 在Vue中实现点击多选功能,通常需要维护一个数组来存储已选中的项,并通过点击事件动态更新该数组。核心逻辑包括数据绑定、事件处理和状态更新。 <template>…

vue实现多选日历

vue实现多选日历

Vue 实现多选日历 使用 Vue 实现多选日历功能可以借助现有的日历库或手动构建。以下是两种常见方法: 使用第三方库(如 V-Calendar) 安装 V-Calendar 库: npm ins…

vue实现按钮多选

vue实现按钮多选

实现按钮多选功能 在Vue中实现按钮多选功能,可以通过以下方法完成。这里提供两种常见的实现方式:基于数组管理和使用v-model绑定。 基于数组管理选中状态 定义一个数组来存储选中的按钮值,通过v-…

vue实现select级联

vue实现select级联

实现 Vue Select 级联的基本方法 使用 Vue 实现级联选择器可以通过动态绑定数据和事件监听来实现。以下是一个基于 Vue 2 的实现示例。 模板部分 <template>…

vue 实现多选全选

vue 实现多选全选

实现多选全选功能 在Vue中实现多选全选功能可以通过以下步骤完成: 数据绑定与状态管理 创建数据模型存储选项列表和选中状态。使用v-model绑定复选框,并通过计算属性管理全选状态。 data(…

vue实现多选和全选

vue实现多选和全选

Vue 实现多选和全选功能 多选和全选是常见的交互功能,可以通过 Vue 的数据绑定和事件处理轻松实现。以下是一个完整的实现方案: 数据准备 在 Vue 的 data 中定义两个关键数据项: it…