当前位置:首页 > 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
分享给朋友:

相关文章

vue实现边框

vue实现边框

Vue 实现边框的方法 在 Vue 中实现边框效果可以通过多种方式完成,包括内联样式、CSS 类绑定、动态样式以及使用第三方 UI 库。以下是几种常见的实现方法。 内联样式绑定 使用 Vue 的 :…

jq 实现 vue

jq 实现 vue

jq 实现 Vue 的核心功能 jq 是一个轻量级的 JavaScript 库,主要用于 DOM 操作和事件处理。虽然它不能完全替代 Vue,但可以通过一些技巧模拟 Vue 的核心功能,如数据绑定、事…

vue 实现挂载

vue 实现挂载

Vue 实现挂载的基本方法 在 Vue 中,挂载是将 Vue 实例与 DOM 元素关联的过程。通过挂载,Vue 可以管理 DOM 并实现数据绑定和响应式更新。 创建 Vue 实例并挂载 const…

vue实现公告

vue实现公告

Vue 实现公告功能的方法 公告功能通常需要实现滚动展示、自动切换或固定显示的效果。以下是几种常见的实现方式: 使用 marquee 标签实现滚动公告 <template> &l…

vue实现hover

vue实现hover

Vue 实现 hover 效果的方法 在 Vue 中实现 hover 效果可以通过多种方式实现,包括使用 CSS、Vue 指令或事件监听。以下是几种常见的方法: 使用 CSS :hover 伪类 通…

vue compile 实现

vue compile 实现

Vue 编译实现原理 Vue 的编译过程将模板字符串转换为渲染函数,主要分为解析、优化和代码生成三个阶段。 解析阶段(Parse) 将模板字符串转换为抽象语法树(AST)。Vue 使用正则表达式和有…