当前位置:首页 > VUE

vue实现picker联动

2026-01-17 11:14:35VUE

Vue 实现 Picker 联动

在 Vue 中实现 Picker 联动通常涉及多个选择器之间的数据依赖关系。以下是一种常见的实现方式:

数据准备

定义数据模型,包括所有可能的选择项和当前选中的值:

data() {
  return {
    provinces: [],
    cities: [],
    districts: [],
    selectedProvince: '',
    selectedCity: '',
    selectedDistrict: ''
  }
}

初始化数据

createdmounted 钩子中加载初始数据:

async mounted() {
  const res = await axios.get('/api/provinces')
  this.provinces = res.data
}

监听变化

使用 watch 监听选择变化并更新下级数据:

watch: {
  selectedProvince(newVal) {
    if (newVal) {
      this.fetchCities(newVal)
      this.selectedCity = ''
      this.selectedDistrict = ''
    }
  },
  selectedCity(newVal) {
    if (newVal) {
      this.fetchDistricts(newVal)
      this.selectedDistrict = ''
    }
  }
}

获取下级数据

定义获取下级数据的方法:

methods: {
  async fetchCities(provinceId) {
    const res = await axios.get(`/api/cities?province=${provinceId}`)
    this.cities = res.data
  },
  async fetchDistricts(cityId) {
    const res = await axios.get(`/api/districts?city=${cityId}`)
    this.districts = res.data
  }
}

模板部分

在模板中使用 select 或自定义 Picker 组件:

<select v-model="selectedProvince">
  <option value="">请选择省份</option>
  <option v-for="item in provinces" :value="item.id">{{ item.name }}</option>
</select>

<select v-model="selectedCity" :disabled="!selectedProvince">
  <option value="">请选择城市</option>
  <option v-for="item in cities" :value="item.id">{{ item.name }}</option>
</select>

<select v-model="selectedDistrict" :disabled="!selectedCity">
  <option value="">请选择区县</option>
  <option v-for="item in districts" :value="item.id">{{ item.name }}</option>
</select>

使用第三方组件库

如果使用 Element UI 等组件库,实现方式类似:

<el-cascader
  :options="options"
  v-model="selectedValues"
  @change="handleChange"
></el-cascader>

移动端 Picker 实现

对于移动端,可以使用 vant 的 Picker 组件:

<van-picker
  title="请选择"
  show-toolbar
  :columns="columns"
  @confirm="onConfirm"
  @cancel="onCancel"
/>

性能优化

对于大数据量的 Picker,建议:

vue实现picker联动

  • 实现懒加载
  • 添加防抖处理
  • 使用虚拟滚动

以上方法可以根据具体需求进行调整和组合使用,实现不同场景下的 Picker 联动效果。

标签: vuepicker
分享给朋友:

相关文章

vue实现详情

vue实现详情

Vue 实现详情页的常见方法 使用动态路由 在 Vue Router 中配置动态路由参数,通过 $route.params 获取详情 ID。示例路由配置: { path: '/detail/:i…

vue 动画实现

vue 动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要分为内置组件和第三方库集成。 使用 Vue 内置过渡组件 Vue 的 <transition> 和 <transiti…

vue实现抽奖

vue实现抽奖

Vue 实现抽奖功能 基本抽奖逻辑 创建一个Vue组件,包含奖品列表、抽奖按钮和结果显示区域。使用随机数生成器选择奖品。 <template> <div> <…

vue 简单实现

vue 简单实现

以下是 Vue 的简单实现示例,涵盖基础模板、数据绑定、方法及生命周期: 基础模板与数据绑定 <div id="app"> <p>{{ message }}</p&…

vue mvvm 实现

vue mvvm 实现

Vue MVVM 实现原理 Vue.js 的 MVVM(Model-View-ViewModel)架构通过数据绑定和响应式系统实现视图与数据的自动同步。以下是其核心实现机制: 数据劫持与响应式系统…

vue 实现聊天

vue 实现聊天

使用 Vue 实现聊天功能 创建 Vue 项目并安装依赖 确保已安装 Vue CLI,通过以下命令创建新项目: vue create chat-app 进入项目目录后,安装必要的依赖(如 Socke…