当前位置:首页 > VUE

vue实现级联

2026-01-12 18:08:31VUE

Vue 实现级联选择器

使用 Vue 实现级联选择器可以通过 el-cascader 组件(Element UI)或自定义递归组件完成。以下是两种常见实现方式:

使用 Element UI 的 el-cascader

安装 Element UI 后直接调用级联组件:

npm install element-ui

模板中配置数据与事件:

vue实现级联

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

数据与事件处理:

export default {
  data() {
    return {
      selectedOptions: [],
      options: [
        {
          value: 'jiangsu',
          label: '江苏',
          children: [
            { value: 'nanjing', label: '南京' }
          ]
        }
      ]
    }
  },
  methods: {
    handleChange(value) {
      console.log(value)
    }
  }
}

自定义递归组件

创建递归组件 CascadeItem.vue

vue实现级联

<template>
  <div>
    <select v-model="selectedValue" @change="onChange">
      <option v-for="item in list" :value="item.value">
        {{ item.label }}
      </option>
    </select>
    <cascade-item 
      v-if="childList.length"
      :list="childList"
      @change="handleChildChange"
    />
  </div>
</template>

组件逻辑:

export default {
  name: 'CascadeItem',
  props: ['list'],
  data() {
    return {
      selectedValue: '',
      childList: []
    }
  },
  methods: {
    onChange(e) {
      const val = e.target.value
      this.childList = this.list.find(item => item.value === val)?.children || []
      this.$emit('change', val)
    },
    handleChildChange(val) {
      this.$emit('change', `${this.selectedValue},${val}`)
    }
  }
}

动态加载数据

对于异步数据场景,可通过 lazy 模式实现:

<el-cascader
  :props="lazyProps"
  v-model="selectedOptions"
></el-cascader>

配置懒加载方法:

export default {
  data() {
    return {
      lazyProps: {
        lazy: true,
        async lazyLoad(node, resolve) {
          const { level } = node
          const res = await fetchOptions(level)
          resolve(res.data)
        }
      }
    }
  }
}

注意事项

  • 多级数据需保持 children 字段名一致
  • 自定义组件需处理边界情况(如空子级)
  • 性能优化建议对大数据源使用虚拟滚动

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

相关文章

django vue实现

django vue实现

Django与Vue.js整合实现方案 Django作为后端框架与Vue.js作为前端框架的整合,可以通过以下方式实现: 分离式开发 前后端完全分离,Django仅提供API接口,Vue.js通过a…

vue实现granfana

vue实现granfana

Vue 实现类似 Grafana 的仪表盘 要在 Vue 中实现类似 Grafana 的仪表盘功能,需要结合数据可视化库、状态管理和 UI 组件。以下是关键步骤和推荐工具: 数据可视化库 使用 E…

vue实现剪辑

vue实现剪辑

Vue 实现视频剪辑功能 在Vue中实现视频剪辑功能通常需要结合HTML5的<video>元素和第三方库(如FFmpeg.js或Video.js)。以下是几种常见的实现方法: 使用FFm…

vue el 实现

vue el 实现

Vue 中使用 Element UI (el) 的实现方法 Element UI 是一个基于 Vue 的组件库,提供丰富的 UI 组件,常用于快速构建企业级中后台产品。以下介绍 Vue 项目中集成和使…

vue实现机制

vue实现机制

Vue 实现机制的核心原理 Vue.js 的核心实现机制主要基于响应式系统、虚拟 DOM 和组件化设计。以下是关键实现细节: 响应式系统 Vue 通过 Object.defineProperty(V…

vue mvvm实现

vue mvvm实现

Vue MVVM 实现原理 Vue.js 是一个基于 MVVM(Model-View-ViewModel)模式的框架,其核心是通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 M…