当前位置:首页 > VUE

vue实现级联

2026-02-10 01:21:43VUE

Vue 实现级联选择器的方法

使用 Element UI 的 Cascader 组件

Element UI 提供了现成的级联选择器组件,适合快速集成到项目中。安装 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: 'zhejiang',
          label: '浙江省',
          children: [
            {
              value: 'hangzhou',
              label: '杭州市',
              children: [
                { value: 'xihu', label: '西湖区' }
              ]
            }
          ]
        }
      ]
    };
  },
  methods: {
    handleChange(value) {
      console.log(value);
    }
  }
};
</script>

使用 Ant Design Vue 的 Cascader 组件

Ant Design Vue 也提供了级联选择器组件,适用于遵循 Ant Design 规范的项目。

vue实现级联

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

<script>
export default {
  data() {
    return {
      selectedOptions: [],
      options: [
        {
          value: 'zhejiang',
          label: '浙江省',
          children: [
            {
              value: 'hangzhou',
              label: '杭州市',
              children: [
                { value: 'xihu', label: '西湖区' }
              ]
            }
          ]
        }
      ]
    };
  },
  methods: {
    handleChange(value) {
      console.log(value);
    }
  }
};
</script>

手动实现级联选择器

如果需要完全自定义的级联选择器,可以通过动态加载数据的方式实现。

<template>
  <div>
    <select v-model="selectedProvince" @change="loadCities">
      <option v-for="province in provinces" :value="province.id" :key="province.id">
        {{ province.name }}
      </option>
    </select>
    <select v-model="selectedCity" @change="loadDistricts" :disabled="!selectedProvince">
      <option v-for="city in cities" :value="city.id" :key="city.id">
        {{ city.name }}
      </option>
    </select>
    <select v-model="selectedDistrict" :disabled="!selectedCity">
      <option v-for="district in districts" :value="district.id" :key="district.id">
        {{ district.name }}
      </option>
    </select>
  </div>
</template>

<script>
export default {
  data() {
    return {
      selectedProvince: '',
      selectedCity: '',
      selectedDistrict: '',
      provinces: [
        { id: '1', name: '浙江省' }
      ],
      cities: [],
      districts: []
    };
  },
  methods: {
    loadCities() {
      this.cities = [
        { id: '101', name: '杭州市' }
      ];
      this.selectedCity = '';
      this.districts = [];
    },
    loadDistricts() {
      this.districts = [
        { id: '1001', name: '西湖区' }
      ];
    }
  }
};
</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;
          setTimeout(() => {
            const nodes = Array.from({ length: level + 1 }).map((_, i) => ({
              value: `${level}-${i}`,
              label: `选项 ${level}-${i}`,
              leaf: level >= 2
            }));
            resolve(nodes);
          }, 1000);
        }
      }
    };
  }
};
</script>

注意事项

  • 数据格式需符合组件要求,通常为嵌套的 children 结构。
  • 动态加载时需注意性能优化,避免频繁请求。
  • 级联选择器的样式可以通过 CSS 自定义,但需遵循组件库的样式规范。

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

相关文章

vue实现上传

vue实现上传

Vue 文件上传实现方法 使用 Vue 实现文件上传可以通过原生 HTML5 的 <input type="file"> 元素结合 Vue 的事件处理和数据绑定来实现。 基础实现步骤…

vue实现开关

vue实现开关

Vue 实现开关组件的方法 使用原生HTML和Vue数据绑定 通过v-model绑定复选框的checked状态,结合CSS样式实现开关效果: <template> <label…

vue事件实现

vue事件实现

Vue 事件实现方法 在Vue中,事件处理是通过v-on指令或@简写来实现的。以下是几种常见的事件处理方式: 使用v-on指令绑定事件 <button v-on:click="handleC…

vue实现组件封装

vue实现组件封装

Vue 组件封装方法 封装组件的基本步骤 创建独立的 .vue 文件,包含 template、script 和 style 三个部分。通过 props 接收父组件传递的数据,使用 $emit 触发自…

vue实现关闭键盘

vue实现关闭键盘

实现关闭键盘的方法 在Vue中关闭键盘通常涉及取消输入框的焦点或阻止默认行为。以下是几种常见实现方式: 通过失去焦点关闭键盘 methods: { closeKeyboard() {…

vue实现反射图

vue实现反射图

Vue 实现反射图的方法 反射图(Reflection Map)通常用于3D渲染中模拟物体表面的环境反射效果。在Vue中实现反射图可以通过以下方法完成: 使用CSS实现简单反射效果 对于2D元素的反…