当前位置:首页 > VUE

vue实现级联选择

2026-01-17 22:38:14VUE

Vue 实现级联选择的方法

使用 Element UI 的 Cascader 组件

Element UI 提供了 el-cascader 组件,支持级联选择功能。以下是一个基本示例:

<template>
  <el-cascader
    v-model="selectedOptions"
    :options="options"
    @change="handleChange"
  ></el-cascader>
</template>

<script>
export default {
  data() {
    return {
      selectedOptions: [],
      options: [
        {
          value: 'province1',
          label: 'Province 1',
          children: [
            {
              value: 'city1',
              label: 'City 1'
            }
          ]
        }
      ]
    };
  },
  methods: {
    handleChange(value) {
      console.log(value);
    }
  }
};
</script>

使用 Ant Design Vue 的 Cascader 组件

Ant Design Vue 也提供了 a-cascader 组件,使用方法类似:

<template>
  <a-cascader
    v-model:value="selectedOptions"
    :options="options"
    @change="handleChange"
  />
</template>

<script>
export default {
  data() {
    return {
      selectedOptions: [],
      options: [
        {
          value: 'province1',
          label: 'Province 1',
          children: [
            {
              value: 'city1',
              label: 'City 1'
            }
          ]
        }
      ]
    };
  },
  methods: {
    handleChange(value) {
      console.log(value);
    }
  }
};
</script>

自定义级联选择组件

如果需要完全自定义级联选择功能,可以通过递归组件实现:

<template>
  <div>
    <select v-model="selectedLevel1" @change="loadLevel2">
      <option v-for="item in level1" :value="item.id">{{ item.name }}</option>
    </select>
    <select v-model="selectedLevel2" @change="loadLevel3">
      <option v-for="item in level2" :value="item.id">{{ item.name }}</option>
    </select>
    <select v-model="selectedLevel3">
      <option v-for="item in level3" :value="item.id">{{ item.name }}</option>
    </select>
  </div>
</template>

<script>
export default {
  data() {
    return {
      level1: [],
      level2: [],
      level3: [],
      selectedLevel1: null,
      selectedLevel2: null,
      selectedLevel3: null
    };
  },
  mounted() {
    this.loadLevel1();
  },
  methods: {
    loadLevel1() {
      // 加载第一级数据
    },
    loadLevel2() {
      // 根据 selectedLevel1 加载第二级数据
    },
    loadLevel3() {
      // 根据 selectedLevel2 加载第三级数据
    }
  }
};
</script>

异步加载数据

对于数据量大的场景,可以使用异步加载:

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

<script>
export default {
  data() {
    return {
      selectedOptions: [],
      props: {
        lazy: true,
        lazyLoad(node, resolve) {
          const { level } = node;
          // 根据 level 和 node.value 异步加载数据
          setTimeout(() => {
            const nodes = Array.from({ length: level + 1 })
              .map(item => ({
                value: Math.random(),
                label: `Option - ${Math.random()}`,
                leaf: level >= 2
              }));
            resolve(nodes);
          }, 1000);
        }
      }
    };
  }
};
</script>

注意事项

  • 数据格式需要符合组件要求,通常包含 valuelabelchildren 字段
  • 对于多选级联,可以设置 props.multiple = true
  • 可以通过 CSS 自定义样式
  • 异步加载时注意处理加载状态和错误情况

vue实现级联选择

标签: 级联vue
分享给朋友:

相关文章

vue实现字母添加排序

vue实现字母添加排序

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

vue原型实现

vue原型实现

Vue 原型实现的关键点 Vue.js 的原型系统是其响应式机制的核心部分,通过原型链实现数据的动态绑定和依赖收集。以下是实现 Vue 原型的主要技术要点。 数据响应式原理 Vue 通过 Objec…

vue实现主题

vue实现主题

Vue 实现主题的方法 使用 CSS 变量动态切换主题 定义全局 CSS 变量,通过修改这些变量实现主题切换。在 Vue 的根组件或全局样式中定义变量: :root { --primary-co…

vue实现alert

vue实现alert

实现自定义 Alert 组件 在 Vue 中可以通过组件化方式实现自定义 Alert 弹窗。以下是基于 Vue 3 的实现示例: 组件代码 (Alert.vue) <template&g…

vue交互实现

vue交互实现

Vue 交互实现方法 Vue.js 提供了多种方式实现用户交互,包括事件处理、表单绑定、动态渲染等。以下是常见的交互实现方法: 事件处理 通过 v-on 或 @ 指令绑定事件,触发方法或直接执行表达…

vue 实现grid

vue 实现grid

在Vue中实现Grid布局可以通过多种方式完成,以下是几种常见的方法: 使用CSS Grid布局 CSS Grid是一种强大的布局系统,可以直接在Vue组件的样式中使用。以下是一个简单的示例:…