当前位置:首页 > VUE

vue实现级联

2026-01-12 18:08:31VUE

Vue 实现级联选择器

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

使用 Element UI 的 el-cascader

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

npm install element-ui

模板中配置数据与事件:

<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

<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 实现倒计时的基本方法 使用 setInterval 和响应式数据 在 Vue 组件中定义一个响应式变量(如 countdown),通过 setInterval 每秒更新数值。组件销毁时清除…

vue实现共享屏幕

vue实现共享屏幕

共享屏幕的基本实现 在Vue中实现共享屏幕功能通常需要结合浏览器的getDisplayMedia API。以下是一个基础实现示例: <template> <div>…

vue如何实现注册

vue如何实现注册

实现用户注册功能 在Vue中实现注册功能通常需要结合前端表单和后端API交互。以下是完整的实现方案: 创建注册表单组件 注册表单需要包含用户名、邮箱、密码等基本字段,并进行表单验证: <…

vue前端实现搜索

vue前端实现搜索

实现搜索功能的基本方法 在Vue中实现搜索功能通常涉及以下几个关键步骤,结合数据绑定、计算属性和方法调用来动态过滤和显示结果。 数据绑定与输入处理 使用v-model双向绑定搜索输入框的值,监听用户…

vue怎么实现页面返回

vue怎么实现页面返回

Vue 实现页面返回的方法 在 Vue 中实现页面返回功能,可以通过以下几种方式完成,具体取决于项目使用的路由模式和技术栈。 使用 Vue Router 的编程式导航 通过 this.$router…

vue登录逻辑的实现

vue登录逻辑的实现

Vue 登录逻辑实现 前端实现 创建登录组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含表单元素,如用户名和密码输入框,以及提交按钮。 <template&…