当前位置:首页 > 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 组件可以通过多种方式实现,以下是常见的几种方法: 单文件组件 (SFC) 使用 .vue 文件,包含模板、脚本和样式三部分: <template>…

vue实现atm

vue实现atm

Vue实现ATM机模拟功能 使用Vue.js实现ATM机模拟功能需要结合组件化开发、状态管理以及用户交互逻辑。以下是关键实现步骤: 核心组件结构 创建以下Vue组件构建ATM界面: Car…

vue实现sql操作

vue实现sql操作

在Vue中实现SQL操作通常需要结合后端服务或本地数据库技术,因为前端JavaScript无法直接连接SQL数据库。以下是几种常见的实现方式: 通过API与后端交互 Vue前端通过HTTP请求(如a…

vue实现人脸识别比对

vue实现人脸识别比对

Vue 实现人脸识别比对的方法 使用现成的人脸识别 API 通过调用第三方人脸识别 API(如 Face++、百度 AI、腾讯云等)实现比对功能。注册开发者账号获取 API Key 和 Secret,…

vue如何实现放大缩小

vue如何实现放大缩小

Vue实现放大缩小功能的方法 在Vue中实现元素的放大缩小功能,可以通过CSS变换、第三方库或直接操作DOM样式来实现。以下是几种常见的方法: 使用CSS transform属性 通过绑定Vue的…

vue实现全局遮罩层

vue实现全局遮罩层

实现全局遮罩层的方法 在Vue中实现全局遮罩层可以通过多种方式完成,以下是几种常见的实现方法: 使用Vue组件创建遮罩层 创建一个遮罩层组件,通过全局注册或动态挂载的方式实现全局调用。以下是一个简单…