当前位置:首页 > VUE

vue实现级联选择

2026-03-10 04:21:57VUE

Vue 实现级联选择的方法

使用 Element UI 的 Cascader 组件

安装 Element UI 依赖:

npm install element-ui

引入 Cascader 组件:

import { Cascader } from 'element-ui';
Vue.use(Cascader);

模板中使用:

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

数据格式示例:

data() {
  return {
    selectedOptions: [],
    options: [{
      value: 'zhinan',
      label: '指南',
      children: [{
        value: 'shejiyuanze',
        label: '设计原则'
      }]
    }]
  }
}

使用 Ant Design Vue 的 Cascader

安装 Ant Design Vue:

npm install ant-design-vue

引入组件:

import { Cascader } from 'ant-design-vue';
Vue.use(Cascader);

模板示例:

<a-cascader
  v-model="value"
  :options="options"
  placeholder="请选择"
  @change="onChange"
/>

自定义实现级联选择

创建递归组件:

<!-- CascaderItem.vue -->
<template>
  <div>
    <select v-model="selectedValue" @change="handleChange">
      <option v-for="item in options" :value="item.value">
        {{ item.label }}
      </option>
    </select>
    <cascader-item
      v-if="selectedValue && children"
      :options="children"
      @change="emitChange"
    />
  </div>
</template>

<script>
export default {
  name: 'CascaderItem',
  props: ['options'],
  data() {
    return {
      selectedValue: null
    }
  },
  computed: {
    children() {
      const selected = this.options.find(
        item => item.value === this.selectedValue
      );
      return selected ? selected.children : null;
    }
  },
  methods: {
    handleChange() {
      this.emitChange([this.selectedValue]);
    },
    emitChange(values) {
      this.$emit('change', [this.selectedValue, ...values]);
    }
  }
}
</script>

父组件中使用:

<cascader-item :options="options" @change="handleCascaderChange"/>

动态加载选项

Element UI 示例:

<el-cascader
  :props="props"
></el-cascader>
data() {
  return {
    props: {
      lazy: true,
      lazyLoad(node, resolve) {
        const { level } = node;
        setTimeout(() => {
          const nodes = Array.from({ length: level + 1 })
            .map(item => ({
              value: ++id,
              label: `选项${id}`,
              leaf: level >= 2
            }));
          resolve(nodes);
        }, 1000);
      }
    }
  };
}

注意事项

级联选择器数据格式要求严格的树形结构,每个节点需要包含 value 和 label 属性

对于大数据量场景建议使用懒加载模式,避免一次性加载所有数据

移动端使用时需要考虑响应式设计和触摸操作体验

vue实现级联选择

可以结合后端 API 实现动态数据加载,通过监听选择变化触发新的数据请求

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

相关文章

vue实现本地数据存储

vue实现本地数据存储

使用 localStorage 或 sessionStorage Vue 中可以直接调用浏览器提供的 localStorage 或 sessionStorage API 进行数据存储。localSto…

vue实现关键词轮播

vue实现关键词轮播

Vue 实现关键词轮播 基础实现方案 使用 Vue 的 v-for 和 setInterval 实现基础轮播效果: <template> <div class="keyword…

vue树形实现

vue树形实现

Vue 树形组件实现方法 使用递归组件实现树形结构 递归组件是 Vue 中实现树形结构的常见方法。通过组件调用自身的方式,可以轻松构建多层嵌套的树形结构。 <template> &l…

实现 vue 框架

实现 vue 框架

Vue 框架的基本实现 Vue 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现 Vue 框架的基本步骤和核心概念。 核心概念 响应式数据绑定 Vue 的核心特性之一是响应式数…

vue实现frame

vue实现frame

Vue 中实现 iframe 的方法 在 Vue 中可以通过直接使用 <iframe> 标签或动态绑定 src 属性来实现 iframe 功能。 基本用法 <template&g…

vue实现flvvideo

vue实现flvvideo

vue-flv-player 实现 FLV 视频播放 安装依赖包 npm install flv.js vue-flv-player 基础组件引入 <template> <v…