当前位置:首页 > 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>

自定义级联多选组件

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

<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 是一个功能强大的树形选择组件,支持多选和级联操作。

安装依赖:

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 方法实现。

Vue实现级联多选

<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 实现多选功能的方法 在 Vue 中实现多选功能可以通过多种方式完成,以下介绍几种常见的实现方法: 使用 v-model 绑定数组 通过 v-model 绑定一个数组,当复选框被选中时,会自动…

vue中实现多选

vue中实现多选

Vue中实现多选的方法 使用v-model绑定数组 在Vue中,可以通过v-model绑定一个数组来实现多选功能。当用户选择多个选项时,选中的值会自动添加到数组中。 <template>…

vue实现单选多选

vue实现单选多选

Vue 实现单选功能 使用 v-model 绑定单选按钮的值,确保同一组单选按钮的 name 属性相同。 <template> <div> <label&g…

vue 实现按钮多选

vue 实现按钮多选

实现按钮多选功能 在Vue中实现按钮多选功能可以通过以下方法完成,主要依赖v-model绑定数组和v-for动态渲染按钮。 数据绑定与渲染 定义一个数组selectedItems用于存储选中的按钮值…

vue 实现多选全选

vue 实现多选全选

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

vue实现标签多选效果

vue实现标签多选效果

实现标签多选效果的方法 在Vue中实现标签多选效果可以通过多种方式完成,以下是几种常见的实现方法: 使用v-model和数组绑定 通过v-model绑定一个数组,当选中标签时,将标签的值添加到数组…