当前位置:首页 > 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

自定义实现

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

vue实现picker联动

模板结构

<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>

数据处理逻辑

vue实现picker联动

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>

标签: vuepicker
分享给朋友:

相关文章

vue里实现增删改查

vue里实现增删改查

在Vue中实现增删改查 数据初始化 在Vue组件的data中定义初始数据和表单绑定的变量: data() { return { items: [ { id: 1, name:…

vue 实现pc

vue 实现pc

Vue 实现 PC 端应用的核心要点 Vue.js 是一个渐进式框架,适合构建 PC 端单页应用(SPA)或复杂的前端界面。以下是实现 PC 端应用的关键方法和注意事项: 项目初始化与工程化配置 使…

vue实现长按

vue实现长按

Vue 实现长按功能的方法 在 Vue 中实现长按功能可以通过原生事件监听或自定义指令完成。以下是几种常见实现方式: 使用原生事件监听 通过 @mousedown 和 @mouseup 或 @tou…

vue实现ssr

vue实现ssr

Vue 实现 SSR(服务端渲染) Vue 的服务端渲染(SSR)允许在服务器端生成完整的 HTML 内容,再发送到客户端,提升首屏加载速度和 SEO 友好性。以下是实现 Vue SSR 的关键步骤和…

vue 实现遮罩

vue 实现遮罩

Vue 实现遮罩层的方法 使用固定定位和透明背景 在Vue中实现遮罩层可以通过CSS固定定位结合透明背景色完成。创建一个全屏遮罩组件,利用position: fixed覆盖整个视窗。 <tem…

vue实现hovuer

vue实现hovuer

Vue 实现 Hover 效果 在 Vue 中实现 hover 效果可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 直接控制 通过 :hover 伪类实现,无需额外的 JavaScrip…