前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VUE下拉框双向联动

VUE下拉框双向联动

作者头像
程序大视界
发布2022-09-22 11:02:56
1.9K1
发布2022-09-22 11:02:56
举报
文章被收录于专栏:程序大视界

原创不易,且行且珍惜

01

前言

在开发前端页面的时候,常常需要写下拉框,普通常见的下拉框有在页面写死固定值的下拉框,有通过调用后台接口服务而获取的值列表等。无论是原始的jsp页面html页面等,还是现在流行的vue angluar.js等,逻辑都是一样。但是大多数时候我们只需要开发一个下拉框即可,本文讲解VUE页面中,通过实际案例场景讲解多个下拉框如何实现双向动态联动效果。

02

代码示例

2.1 在vue页面的<el-form 表单里填充两个<el-col :span="12">选项,分别为选项A和选项B,如下所示:

代码语言:javascript
复制
<el-col :span="12">
    <el-form-item label="选项A"  prop="A">            
      <el-select style="width: 100%;" @change="changeAList($event)"
        v-model="temp.A"
        filterable
        remote
        clearable
        placeholder="请选择"
        :remote-method="getAMethod"
        :loading="loading">
        <el-option
          v-for="item in ListA"
          :key="item.value"
          :label="item.value"
          :value="item.label">
        </el-option>
      </el-select>
    </el-form-item>
  </el-col>
  <el-col :md="12" >
    <el-form-item label="选项B"  prop="B">            
      <el-select style="width: 100%;" @change="changeBList($event)"
        v-model="temp.B"
        filterable
        remote
        clearable
        placeholder="请选择"
        :remote-method="getBMethod"
        :loading="loading">
        <el-option
          v-for="item in ListB"
          :key="item.value"
          :label="item.value"
          :value="item.label">
        </el-option>
      </el-select>
    </el-form-item>
  </el-col>

2.2 在data的return模块定义两个list集合,用于装载选项A和选项B的数据list集

代码语言:javascript
复制
data() {
  return {

            ListA: [],

            ListB: [],
      }

|

2.3 在methods: 方法区定义下拉框选项加载从后台接口服务获取的方法。getAMethod用来加载A选项的下拉框内容。getBMethod用来加载B选项的下拉框内容。

代码语言:javascript
复制
getAMethod(temp) {
    XXAPI.getAValue(temp)
    .then(response => {
      if(response.data && response.status == 200){
        this.ListA= []
        var result = response.data.data.XX
        let jsonObj = JSON.parse(result);
        for (let k of Object.keys(jsonObj)) {
          this.ListA.push(
            {
              label: k,
              value: jsonObj[k].属性A,
            }
          )
        }
      }
    })
  },
  getBMethod(temp) {
    XXAPI.getDicValue2(temp)
    .then(response => {
      if(response.data && response.status == 200){
        this.ListB = []
        var result = response.data.data.XX
        let jsonObj = JSON.parse(result);
        for (let k of Object.keys(jsonObj)) {
          this.ListB .push(
            {
              label: k,
              value: jsonObj[k].属性B,
            }
          )
        }
      }
    })
  },

上述步骤仅完成基本的框架搭建,也就是说后台和前端的数据集合装载以及接口服务调用用以获取数据集合等。

2.4 实现联动,大家都知道在vue的页面中,想要实现多个<el-select 下拉框的值动态改变,必须要调用@change 函数。也就是图1中已经标注的:

@change="changeAList($event) 和 @change="changeBList($event)

通过这2个方法即可实现两个下拉框的双向联动效果。

同样在methods:方法区定义方法:

代码语言:javascript
复制
changeBList(e){
  this.indexSelectB(e)
},
changeAList(e){
  this.indexSelectA(e)
},

 indexSelectB(e){
    if(this.ListA == undefined || this.ListA .length <= 0){
        this.getAMethod(this.temp);
    }
    let i = 0;
    for (i = 0;i<this.ListA .length;i++) {
      if (this.ListA [i].label == e){
        this.temp.A= this.ListA [i].value;
        break
      }
    }
  },
  indexSelectA(e){
    if(this.ListB == undefined || this.ListB.length <= 0){
        this.getBMethod(this.temp);
    }
    let i = 0;
    for (i = 0;i<this.ListB.length;i++) {
      if (this.ListB[i].label == e){
        this.temp.B= this.ListB[i].value;
        break
      }
    }
  }

以上方法即可实现选项A和选项B两个下拉框的双向联动。但是有个小缺陷,必须要输入字符后才能加载出来数据。

这是因为没有在页面创建的时候,就把后台的数据load出来,实现这个效果也很简单,只需要在created模块中调用两个加载后台接口服务的方法即可,如下:

代码语言:javascript
复制
created() {
  ...
  this.getAMethod(this.temp);
  this.getBMethod(this.temp);
  ...
},

03

总结

在一些业务场景中,两个或以上的下拉框的业务是关联的,选择其中一个下拉框A的值的时候,另一个下拉框B的值必须为与A是关联的值;也就是说选了A必须有B的选项,反过来同样的道理,选了B的值必须关联上A的值。可以理解为A和B的值在业务逻辑上已经绑定好了,用户的界面只是按业务需要选择哪一个。以此类推,当有2个以上的值需要动态加载并且关联选择时,这个功能同样适用。本文的讲解希望对使用VUE开发页面时,遇到多个下拉框动态联动选择场景的伙伴们带来一些帮助和启发。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序大视界 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档