当前位置:首页 > VUE

vue实现级联

2026-03-07 01:11:30VUE

Vue 实现级联选择器

级联选择器(Cascader)常用于省市区、分类等层级数据的联动选择。Vue 中可通过 Element UI、Ant Design Vue 等组件库或自定义实现。

使用 Element UI 的 Cascader 组件

安装 Element UI 后直接使用 <el-cascader> 组件:

vue实现级联

<template>
  <el-cascader
    v-model="selectedOptions"
    :options="options"
    :props="{ expandTrigger: 'hover' }"
    @change="handleChange"
  />
</template>

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

使用 Ant Design Vue 的 Cascader

安装 Ant Design Vue 后使用 <a-cascader>

vue实现级联

<template>
  <a-cascader
    v-model:value="value"
    :options="options"
    placeholder="请选择"
    @change="onChange"
  />
</template>

<script>
import { ref } from 'vue'
export default {
  setup() {
    const value = ref([])
    const options = [
      {
        value: 'zhejiang',
        label: '浙江',
        children: [
          { value: 'hangzhou', label: '杭州' }
        ]
      }
    ]
    const onChange = (selectedOptions) => {
      console.log(selectedOptions)
    }
    return { value, options, onChange }
  }
}
</script>

自定义级联选择器

通过递归组件实现自定义级联:

<template>
  <div>
    <select v-model="selectedProvince" @change="loadCities">
      <option v-for="province in provinces" :value="province.id">
        {{ province.name }}
      </option>
    </select>
    <select v-model="selectedCity" @change="loadAreas">
      <option v-for="city in cities" :value="city.id">
        {{ city.name }}
      </option>
    </select>
    <select v-model="selectedArea">
      <option v-for="area in areas" :value="area.id">
        {{ area.name }}
      </option>
    </select>
  </div>
</template>

<script>
export default {
  data() {
    return {
      provinces: [{ id: 1, name: '江苏' }],
      cities: [],
      areas: [],
      selectedProvince: null,
      selectedCity: null,
      selectedArea: null
    }
  },
  methods: {
    loadCities() {
      this.cities = [{ id: 101, name: '南京' }]
    },
    loadAreas() {
      this.areas = [{ id: 10101, name: '玄武区' }]
    }
  }
}
</script>

动态加载数据

对于大数据量场景可动态加载子级数据:

props: {
  lazy: true,
  lazyLoad(node, resolve) {
    const { level } = node
    setTimeout(() => {
      const nodes = level === 0 
        ? [{ value: 1, label: '江苏' }] 
        : [{ value: 101, label: '南京' }]
      resolve(nodes)
    }, 500)
  }
}

注意事项

  • 数据结构需符合 value/label/children 格式
  • 多选场景需配置 props.multiple = true
  • 远程加载数据建议添加 loading 状态
  • 移动端考虑使用 picker 组件替代

通过以上方式可灵活实现不同复杂度的级联选择功能,组件库方案适合快速开发,自定义方案更适合特殊交互需求。

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

相关文章

vue自己实现下拉导航

vue自己实现下拉导航

实现下拉导航的基本思路 在Vue中实现下拉导航,可以通过结合Vue的响应式数据和事件绑定特性来完成。主要思路是利用v-show或v-if控制下拉菜单的显示与隐藏,并通过鼠标事件或点击事件触发状态变化。…

vue实现倒计时抢券

vue实现倒计时抢券

Vue 实现倒计时抢券功能 核心逻辑 倒计时抢券功能需要结合时间计算、状态管理和界面交互。通过 Vue 的响应式特性和生命周期钩子,可以高效实现这一需求。 实现步骤 1. 数据准备 在 Vue 组件…

vue实现后退

vue实现后退

Vue 实现后退功能的方法 在 Vue 中实现后退功能通常可以通过以下几种方式完成,具体取决于应用场景和需求。 使用 window.history API 通过原生 JavaScript 的 win…

vue实现订单

vue实现订单

Vue 实现订单功能 订单数据结构设计 订单数据通常包含以下字段: order: { id: String, // 订单ID userId: String,…

vue diff实现

vue diff实现

Vue Diff 算法实现原理 Vue 的虚拟 DOM Diff 算法(即 patch 过程)是其高效渲染的核心,主要通过对比新旧虚拟节点的差异,最小化 DOM 操作。以下是关键实现要点: 同层级比…

vue实现刷卡

vue实现刷卡

Vue 实现刷卡效果 在 Vue 中实现刷卡效果可以通过 CSS 动画和 Vue 的过渡系统结合完成。以下是一种常见的实现方式: 基础实现方法 安装 Vue 过渡依赖(如果尚未安装): npm i…