当前位置:首页 > VUE

vue 实现无限级联动

2026-02-24 15:18:20VUE

实现无限级联动的核心思路

无限级联动通常指多层级联选择器,例如省市区选择或分类选择。Vue中可通过递归组件或动态数据加载实现。

递归组件实现方式

创建可递归调用的子组件,通过v-for渲染当前层级选项,并嵌套自身组件处理下一级数据。

<template>
  <div>
    <select v-model="selectedValue" @change="handleChange">
      <option v-for="item in options" :value="item.value">{{ item.label }}</option>
    </select>
    <child-select 
      v-if="nextOptions.length"
      :options="nextOptions"
      @select="handleChildSelect"
    />
  </div>
</template>

<script>
export default {
  name: 'ChildSelect',
  props: ['options'],
  data() {
    return {
      selectedValue: '',
      nextOptions: []
    }
  },
  methods: {
    handleChange() {
      const selected = this.options.find(item => item.value === this.selectedValue)
      this.nextOptions = selected?.children || []
      this.$emit('select', this.selectedValue)
    },
    handleChildSelect(val) {
      this.$emit('select', val)
    }
  }
}
</script>

动态数据加载实现

通过API异步加载各级数据,适合大数据量场景。

export default {
  data() {
    return {
      levels: [
        { options: [], selected: null },
        { options: [], selected: null }
      ]
    }
  },
  methods: {
    async loadOptions(levelIndex, parentId) {
      const res = await api.getOptions(parentId)
      this.levels[levelIndex].options = res.data
      // 清空后续层级选择
      for (let i = levelIndex + 1; i < this.levels.length; i++) {
        this.levels[i].selected = null
        this.levels[i].options = []
      }
    },
    handleSelect(levelIndex, value) {
      this.levels[levelIndex].selected = value
      if (levelIndex < this.levels.length - 1) {
        this.loadOptions(levelIndex + 1, value)
      }
    }
  },
  created() {
    this.loadOptions(0)
  }
}

使用现成组件库

Element UI等库提供现成的级联选择器组件:

<el-cascader
  :options="options"
  :props="{ checkStrictly: true }"
  @change="handleChange"
></el-cascader>

性能优化建议

对于大数据量场景,建议采用虚拟滚动技术。可考虑使用第三方库如vue-virtual-scroller

vue 实现无限级联动

import { RecycleScroller } from 'vue-virtual-scroller'
export default {
  components: { RecycleScroller }
}

注意事项

组件间通信建议使用Vuex管理状态,避免深层prop传递。动态层级数量可通过v-for配合数组长度控制。

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

相关文章

vue实现列表显示

vue实现列表显示

Vue 实现列表显示的方法 在 Vue 中实现列表显示通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式。 基本列表渲染 通过 v-for 指令遍历数组,动态生成列…

用vue实现滑动输入条

用vue实现滑动输入条

使用 Vue 实现滑动输入条 使用原生 HTML5 input range 实现 在 Vue 模板中直接使用 <input type="range">,通过 v-model 绑定数据:…

vue实现星星

vue实现星星

实现星星评分的Vue组件 使用Vue实现星星评分功能可以通过组件化方式完成,以下是一个完整的实现方案: 模板部分 <template> <div class="star-ra…

vue实现评分

vue实现评分

Vue 实现评分功能 使用组件库实现 安装 element-ui 或 ant-design-vue 这类 UI 库,它们已经内置了评分组件。 以 element-ui 为例: <te…

vue实现画廊

vue实现画廊

Vue实现画廊的基本方法 使用Vue.js实现画廊功能可以通过多种方式完成,以下是一种常见的实现方案: 安装必要依赖 npm install vue-gallery --save 引入组件并注册…

lua 实现vue

lua 实现vue

在 Lua 中实现类似 Vue 的响应式框架需要模拟 Vue 的核心功能,包括数据绑定、模板渲染和依赖追踪。以下是实现的关键思路和代码示例: 响应式数据绑定 使用 Lua 的 __index 和 _…