当前位置:首页 > VUE

vue实现级联选择

2026-01-17 22:38:14VUE

Vue 实现级联选择的方法

使用 Element UI 的 Cascader 组件

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

vue实现级联选择

<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 组件,使用方法类似:

vue实现级联选择

<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 中实现选区创建通常涉及 DOM 操作和事件处理。以下是几种常见的方法: 使用原生 DOM API 通过 window.getSelection() 和 Ran…

vue实现菜单调用

vue实现菜单调用

Vue 实现动态菜单的常见方法 基于路由配置生成菜单 Vue Router 的路由配置可以天然转化为菜单结构,适合权限与路由绑定的系统: // router/index.js const route…

vue实现博客

vue实现博客

Vue 实现博客的基本步骤 使用 Vue.js 实现一个博客系统可以分为前端和后端两部分。以下是基于 Vue 的前端实现方案,后端可以选择 Node.js、Django 或其他框架。 项目初始化 使…

vue实现popup

vue实现popup

Vue 实现 Popup 弹窗 使用 Vue 原生组件 创建一个基本的 Vue 组件作为弹窗,通过 v-if 或 v-show 控制显示隐藏。 <template> <div&…

vue实现浮标

vue实现浮标

Vue 实现浮动按钮(浮标) 使用 Vue 实现浮动按钮可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 定位和 Vue 组件 创建 Vue 组件并配合 CSS 固定定位实现浮动按钮:…

vue 实现搜索

vue 实现搜索

实现 Vue 搜索功能 在 Vue 中实现搜索功能通常涉及以下几个关键步骤: 数据绑定与输入监听 使用 v-model 双向绑定搜索输入框的值,监听用户输入: <template>…