当前位置:首页 > VUE

vue实现关联选择显示

2026-02-21 16:36:15VUE

Vue 实现关联选择显示

关联选择显示通常指多个下拉菜单之间存在依赖关系,例如选择省份后动态加载城市列表。以下是实现方法:

数据绑定与监听

在Vue组件中定义响应式数据存储选项和选中值:

data() {
  return {
    provinces: [],
    cities: [],
    selectedProvince: null,
    selectedCity: null
  }
}

获取初始选项数据

在created或mounted钩子中初始化第一级选项:

vue实现关联选择显示

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

监听第一级选择变化

使用watch监听第一级选择的变化,触发第二级选项加载:

watch: {
  selectedProvince(newVal) {
    if (newVal) {
      this.loadCities(newVal)
      this.selectedCity = null // 重置二级选择
    }
  }
},
methods: {
  async loadCities(provinceId) {
    const res = await axios.get(`/api/cities?province=${provinceId}`)
    this.cities = res.data
  }
}

模板渲染

使用v-model绑定选择值,v-for渲染选项:

vue实现关联选择显示

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

<select v-model="selectedCity" :disabled="!selectedProvince">
  <option v-for="c in cities" :value="c.id">{{ c.name }}</option>
</select>

优化处理

添加加载状态和空状态提示:

<select v-model="selectedCity" :disabled="!selectedProvince || loading">
  <option v-if="cities.length === 0" disabled>请先选择省份</option>
  <option v-for="c in cities" :value="c.id">{{ c.name }}</option>
</select>

使用计算属性

对于复杂逻辑可以使用计算属性派生数据:

computed: {
  filteredCities() {
    return this.cities.filter(c => c.population > 1000000)
  }
}

组件化方案

对于多处使用的关联选择,可以封装为独立组件:

Vue.component('cascade-select', {
  props: ['levels'],
  data() {
    return {
      selections: Array(this.levels.length).fill(null)
    }
  },
  methods: {
    handleSelect(index, value) {
      this.$set(this.selections, index, value)
      if (index < this.levels.length - 1) {
        this.$emit('load', index + 1, value)
      }
    }
  }
})

标签: vue
分享给朋友:

相关文章

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &l…

vue实现滑块

vue实现滑块

Vue 实现滑块组件的方法 使用原生 HTML 和 Vue 指令 通过 Vue 的 v-model 和事件监听实现基础滑块功能。创建一个包含 input 元素的组件,类型设置为 range,并绑定到…

vue实现cs

vue实现cs

Vue 实现 CS(Client-Side)渲染的常见方法 Vue.js 是一个用于构建用户界面的渐进式框架,默认采用客户端渲染(CSR)。以下是几种常见的实现方式: 使用 Vue CLI 创建项…

vue登录实现

vue登录实现

Vue 登录实现 实现登录功能通常需要前端与后端配合,Vue 作为前端框架,主要负责表单处理、请求发送和状态管理。以下是常见的实现方式: 表单设计与数据绑定 使用 Vue 的 v-model 实现表…

vue 菜单实现

vue 菜单实现

Vue 菜单实现方法 在Vue中实现菜单功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-for动态生成菜单 通过数据驱动的方式动态渲染菜单项,适合菜单内容可能变化的场景: <…

vue删除实现

vue删除实现

Vue 删除功能的实现方法 在 Vue 中实现删除功能通常涉及以下几个步骤: 方法一:使用数组的 splice 方法 通过索引删除数组中的元素,适用于列表渲染的场景。 methods: {…