当前位置:首页 > VUE

vue实现picker联动

2026-02-18 03:51:43VUE

Vue 实现 Picker 联动

数据准备

定义联动数据源,通常为嵌套结构。例如三级联动可使用如下格式:

data() {
  return {
    options: [
      {
        label: '省份',
        children: [
          { label: '城市', children: [{ label: '区县' }] }
        ]
      }
    ],
    selectedValues: []
  }
}

组件选择

推荐使用现成组件库:

  • Element UI 的 Cascader 级联选择器
  • Vant 的 Picker 组件(移动端友好)
  • Ant Design Vue 的 Cascader

自定义实现

若需手动实现,核心逻辑如下:

模板结构

<select v-model="selectedProvince" @change="handleProvinceChange">
  <option v-for="item in provinces" :value="item.id">{{ item.name }}</option>
</select>

<select v-model="selectedCity" @change="handleCityChange">
  <option v-for="item in cities" :value="item.id">{{ item.name }}</option>
</select>

<select v-model="selectedDistrict">
  <option v-for="item in districts" :value="item.id">{{ item.name }}</option>
</select>

数据处理逻辑

methods: {
  handleProvinceChange() {
    this.cities = getCitiesByProvince(this.selectedProvince)
    this.selectedCity = null
    this.districts = []
  },

  handleCityChange() {
    this.districts = getDistrictsByCity(this.selectedCity)
  }
}

动态加载

对于大数据量场景可采用异步加载:

async loadChildrenOptions(selectedOption) {
  const res = await api.getChildren(selectedOption.id)
  selectedOption.children = res.data
}

表单绑定

使用 v-model 进行双向绑定:

data() {
  return {
    form: {
      region: []
    }
  }
}

注意事项

  • 深度监听数据变化时使用 deep: true
  • 清空子选项时应重置下级选择器
  • 移动端需考虑触摸交互体验
  • 大数据量建议使用虚拟滚动优化性能

完整示例(Vant Picker)

<template>
  <van-picker
    :columns="columns"
    @change="onChange"
    v-model="selectedValues"
  />
</template>

<script>
export default {
  data() {
    return {
      columns: [
        {
          values: ['省份1', '省份2'],
          children: [
            { values: ['城市1-1', '城市1-2'] },
            { values: ['城市2-1', '城市2-2'] }
          ]
        }
      ],
      selectedValues: []
    }
  },
  methods: {
    onChange(picker, values) {
      picker.setColumnValues(2, ['区县数据'])
    }
  }
}
</script>

vue实现picker联动

标签: vuepicker
分享给朋友:

相关文章

用vue实现搜索查询

用vue实现搜索查询

实现搜索查询的基本思路 在Vue中实现搜索查询功能通常涉及以下几个核心部分:数据绑定、事件监听、过滤逻辑和UI反馈。以下是一个完整的实现方案。 数据绑定与输入框 创建一个Vue组件,包含一个输入框用…

vue实现发送值接受值

vue实现发送值接受值

Vue 实现父子组件传值 父组件向子组件传值(props) 父组件通过 v-bind 或简写 : 向子组件传递数据。子组件通过 props 接收数据。 父组件代码: <template&g…

vue实现截图

vue实现截图

Vue 实现截图的方法 使用 html2canvas 库 安装 html2canvas 库: npm install html2canvas 在 Vue 组件中使用: import html2ca…

django vue实现

django vue实现

Django与Vue.js整合实现方案 Django作为后端框架与Vue.js作为前端框架的整合,可以通过以下方式实现: 分离式开发 前后端完全分离,Django仅提供API接口,Vue.js通过…

vue grid实现

vue grid实现

Vue Grid 实现方法 在 Vue 中实现网格布局可以通过多种方式完成,包括使用原生 CSS Grid、第三方组件库或自定义组件。以下是几种常见方法: 使用原生 CSS Grid 通过 Vue…

vue路由实现

vue路由实现

Vue 路由实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的基本实现步骤和核心功能。 安装 Vue Router 通过…