当前位置:首页 > VUE

vue实现双联动

2026-03-09 05:52:38VUE

Vue 实现双联动的方法

双联动通常指两个下拉选择框(Select)之间的数据联动,即第一个选择框的值改变时,第二个选择框的选项随之变化。以下是实现双联动的几种方法。

使用 v-model 和 computed 属性

通过 v-model 绑定选择框的值,利用 computed 属性动态计算第二个选择框的选项。

vue实现双联动

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

    <select v-model="selectedCity">
      <option v-for="city in cities" :key="city.id" :value="city.id">
        {{ city.name }}
      </option>
    </select>
  </div>
</template>

<script>
export default {
  data() {
    return {
      provinces: [
        { id: 1, name: '广东省' },
        { id: 2, name: '江苏省' },
      ],
      cities: [],
      selectedProvince: null,
      selectedCity: null,
    };
  },
  computed: {
    filteredCities() {
      if (!this.selectedProvince) return [];
      return this.cities.filter(city => city.provinceId === this.selectedProvince);
    },
  },
  watch: {
    selectedProvince(newVal) {
      this.cities = this.getCitiesByProvince(newVal);
      this.selectedCity = null;
    },
  },
  methods: {
    getCitiesByProvince(provinceId) {
      // 模拟从接口获取数据
      const cityData = {
        1: [
          { id: 101, name: '广州市', provinceId: 1 },
          { id: 102, name: '深圳市', provinceId: 1 },
        ],
        2: [
          { id: 201, name: '南京市', provinceId: 2 },
          { id: 202, name: '苏州市', provinceId: 2 },
        ],
      };
      return cityData[provinceId] || [];
    },
  },
};
</script>

使用 Vuex 管理状态

如果项目中使用 Vuex,可以将联动数据存储在全局状态中,通过 mapStatemapActions 实现联动。

vue实现双联动

<template>
  <div>
    <select v-model="selectedProvince" @change="updateCities">
      <option v-for="province in provinces" :key="province.id" :value="province.id">
        {{ province.name }}
      </option>
    </select>

    <select v-model="selectedCity">
      <option v-for="city in cities" :key="city.id" :value="city.id">
        {{ city.name }}
      </option>
    </select>
  </div>
</template>

<script>
import { mapState, mapActions } from 'vuex';

export default {
  computed: {
    ...mapState(['provinces', 'cities']),
    selectedProvince: {
      get() {
        return this.$store.state.selectedProvince;
      },
      set(value) {
        this.$store.commit('setSelectedProvince', value);
      },
    },
    selectedCity: {
      get() {
        return this.$store.state.selectedCity;
      },
      set(value) {
        this.$store.commit('setSelectedCity', value);
      },
    },
  },
  methods: {
    ...mapActions(['fetchCitiesByProvince']),
    updateCities() {
      this.fetchCitiesByProvince(this.selectedProvince);
    },
  },
};
</script>

使用第三方组件库

如果使用 Element UI 或 Ant Design Vue 等组件库,可以直接使用其提供的级联选择组件(Cascader)或联动选择功能。

以 Element UI 为例:

<template>
  <div>
    <el-select v-model="selectedProvince" placeholder="请选择省份">
      <el-option
        v-for="province in provinces"
        :key="province.id"
        :label="province.name"
        :value="province.id"
      />
    </el-select>

    <el-select v-model="selectedCity" placeholder="请选择城市">
      <el-option
        v-for="city in cities"
        :key="city.id"
        :label="city.name"
        :value="city.id"
      />
    </el-select>
  </div>
</template>

注意事项

  • 数据初始化时,确保第一个选择框有默认值,避免第二个选择框无数据。
  • 在联动逻辑中,清除第二个选择框的值(如 this.selectedCity = null),避免残留数据。
  • 如果数据来自接口,使用 watch 监听第一个选择框的变化,触发接口请求。

通过以上方法,可以灵活实现 Vue 中的双联动功能。

标签: 双联vue
分享给朋友:

相关文章

vue实现右下角弹框

vue实现右下角弹框

实现右下角弹框的基本思路 在Vue中实现右下角弹框,通常需要结合CSS定位和Vue的组件化特性。弹框可以通过绝对定位固定在右下角,并通过Vue控制其显示与隐藏。 创建弹框组件 新建一个Vue组件(如…

vue实现机制

vue实现机制

Vue 实现机制的核心原理 Vue.js 的核心实现机制主要基于响应式系统、虚拟 DOM 和组件化设计。以下是关键实现细节: 响应式系统 Vue 通过 Object.defineProperty(V…

vue实现波形

vue实现波形

实现波形效果的方法 在Vue中实现波形效果可以通过多种方式完成,常见的方法包括使用Canvas绘制、CSS动画或第三方库。以下是几种实现方案: 使用Canvas绘制波形 通过Canvas API动态…

vue mvvm 实现

vue mvvm 实现

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

vue实现展开

vue实现展开

展开功能的实现方法 在Vue中实现展开功能可以通过多种方式完成,常见的有使用v-show、v-if指令,结合CSS过渡动画或第三方组件库。 使用v-show控制显示隐藏 通过v-show指令可以简单…

vue前端实现

vue前端实现

Vue 前端实现基础步骤 安装 Vue.js 和相关依赖 通过 npm 或 yarn 安装 Vue.js,建议使用 Vue CLI 快速搭建项目。运行命令 npm install -g @vue/cl…