当前位置:首页 > 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中实现直播功能,通常需要结合WebRTC、RTMP或HLS等技术。以下是几种常见的实现方式: 使用WebRTC实现实时直播 WebRTC适合低延迟的实时直播场景,…

vue实现xss

vue实现xss

XSS 攻击简介 XSS(跨站脚本攻击)是一种常见的安全漏洞,攻击者通过注入恶意脚本到网页中,当其他用户访问该页面时,脚本会在其浏览器中执行,可能导致数据泄露或会话劫持。 Vue 中的 XSS…

vue实现list

vue实现list

Vue 实现列表渲染 在 Vue 中,可以使用 v-for 指令来渲染列表。v-for 指令基于一个数组或对象来渲染一个列表,可以遍历数组或对象的属性。 基本列表渲染 <template>…

vue 简单实现

vue 简单实现

以下是 Vue 的简单实现示例,涵盖基础模板、数据绑定、方法及生命周期: 基础模板与数据绑定 <div id="app"> <p>{{ message }}</…

vue实现tab功能

vue实现tab功能

Vue 实现 Tab 功能的方法 使用动态组件和 v-if 指令 通过 v-if 或 v-show 控制不同 Tab 内容的显示与隐藏。这种方法适合简单的 Tab 切换需求。 <templat…

vue 实现管理系统

vue 实现管理系统

Vue 实现管理系统的基本步骤 使用 Vue 实现管理系统需要结合前端框架、UI 组件库和后端接口。以下是一个常见的实现方案。 技术选型 前端框架:Vue 3(Composition API)或 V…