当前位置:首页 > 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中实现滚动效果可以通过多种方式完成,包括使用原生JavaScript、CSS或第三方库。以下是一些常见的方法: 使用window.scrollTo方法实现页面滚动 可以通…

computed vue 实现

computed vue 实现

computed 在 Vue 中的基本用法 Vue 的 computed 属性用于声明依赖于其他数据的计算属性。当依赖的数据变化时,计算属性会自动重新计算并缓存结果。 export defaul…

vue实现123456

vue实现123456

Vue 实现数字 123456 的显示 在 Vue 中显示数字 123456 非常简单,可以通过以下方法实现: 方法一:直接在模板中显示 <template> <div>…

vue cli 实现

vue cli 实现

Vue CLI 实现步骤 安装 Vue CLI 确保 Node.js 版本在 8.9 或以上。通过 npm 全局安装 Vue CLI: npm install -g @vue/cli 创建新项目 使…

vue实现换页

vue实现换页

Vue实现页面切换的方法 在Vue中实现页面切换通常可以通过Vue Router来完成。Vue Router是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。以下是几种常见的实现方式:…

vue 实现图钉

vue 实现图钉

实现图钉效果的步骤 在Vue中实现图钉(固定位置)效果,可以通过CSS的position: sticky属性或监听滚动事件动态修改元素样式。以下是两种常见方法: 方法一:使用CSS的position…