vue使用el-select下拉框匹配不到值的问题及解决

 更新时间:2023年05月20日 10:51:51   作者:铁锤妹妹@  
这篇文章主要介绍了vue使用el-select下拉框匹配不到值的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用el-select下拉框匹配不到值的问题

问题描述

点击编辑弹窗里从上面列表行数据里取到的乙方名称变成了乙方id15,产生的原因是因为弹窗里的甲乙方列表是从接口请求来的,比如后期某个乙方公司关停了,这条数据就会被删除,导致我们取不到这条数据

查看接口返回的列表,发现少了行数据中的乙方这条数据

解决思路

1.findIndex() 返回值判断编辑当前行数据取到的id和甲乙方列表里的id是否有一样的; 如果有相同id的话,返回第一个符合条件的数组成员位置,都不符合条件,则返回 -1

2.如果返回数组成员位置 < 0 的话,从列表行数据取id和name值,创建一条被删除这条数据的新对象;push进数组的最后一条,这样就不存在id取不到的情况了

解决方法

 <el-form-item v-if="showPartner === '1'" label="甲方">
        <el-select v-model="partnerForm.partner_id_a" filterable>
          <el-option
            v-for="(val, key) in partnerAList"
            :key="key"
            :label="val.partner_name"
            :value="val.id"
          />
        </el-select>
      </el-form-item>
      <el-form-item v-if="showPartner === '1'" label="乙方">
        <el-select v-model="partnerForm.partner_id_b" filterable>
          <el-option
            v-for="(val, key) in partnerBList"
            :key="key"
            :label="val.partner_name"
            :value="val.id"
          />
        </el-select>
      </el-form-item>
setup(props, { emit }) {
    const partnerAList = ref<any[]>([])
    const partnerBList = ref<any[]>([])
    const showPartner = ref<string>('0')
    const dataMap = reactive({
      partnerForm: {
        phone: '',
        partner_id_a: '0',
        partner_id_b: '0',
        username: '',
        remark: '',
        status: ''
      }
    })
    const { onSubmit, close, formNode, subLoading } = useForm({ type: props.type, emit: emit, editApi: partnerApi['EDITPARTNERUSER'], addApi: partnerApi['ADDPARTNERUSER'], form: dataMap.partnerForm }) 
    function getPartnerAList() {
      partnerApi['GETPARTNERALIST']().then((res: any) => {
        if (res.data.code === '20000') {
          partnerAList.value = res.data.data
          var tempObj = { id: '0', partner_name: '请选择' }
          partnerAList.value.unshift(tempObj)
          const temp = res.data.data.findIndex((item:any) => {
            return item.id === props.info['partner_id_a']
          })
          if (temp < 0) {
            const presentObj = { id: props.info['partner_id_a'], partner_name: props.info['party_a_name'] }
            partnerAList.value.push(presentObj)
          }
        }
      })
    }
    function getPartnerBList() {
      partnerApi['GETPARTNERBLIST']().then((res: any) => {
        if (res.data.code === '20000') {
          partnerBList.value = res.data.data
          var tempObj = { id: '0', partner_name: '请选择' }
          partnerBList.value.unshift(tempObj)
          const temp = res.data.data.findIndex((item:any) => {
            return item.id === props.info['partner_id_b']
          })
          if (temp < 0) {
            const presentObj = { id: props.info['partner_id_b'], partner_name: props.info['party_b_name'] }
            partnerBList.value.push(presentObj)
          }
        }
      })
    }
    onMounted(() => {
      getPartnerAList()
      getPartnerBList()
    })
    return {
      formNode,
      ...toRefs(dataMap),
      partnerFormRules,
      onSubmit,
      close,
      subLoading,
      partnerAList,
      partnerBList,
      showPartner,
      onSubmitForm
    }
  }

el-select下拉框,选择后赋值成功,但是框上不显示选中的值的解决

最近在做项目时发现el-select下拉框,选择后赋值成功,但是框上不显示选中的值。

后来查了下官方文档之后发现原因:

vue 无法监听动态新增的属性的变化,需要用 $set 来为这些属性赋值。

如上图所示,操作人下拉框初始没有值,选择了操作班组之后,根据所选的班组去获取后台数据填充操作人下拉框。

然后就发现了问题:选择了操作人之后输入框还是没有值,但是绑定的@change事件currOperatorChange 打印出了选中的值。

解决方法:用 $set 来赋值

如下所示:

<el-row>
              <el-col :span="12">
                <el-form-item prop="deptId"
                              :label="$t('taskManage.lockTask.deptId')+':'">
                  <treeselect :placeholder="$t('taskManage.lockTask.selDeptId')"
                              :options="deptTree"
                              :normalizer="normalizer"
                              v-model="formData.deptId"
                              @select="selectDepart">
                  </treeselect>
                </el-form-item>
              </el-col>
              <el-col :span="12">
                <el-form-item prop="operateId"
                              :label="$t('taskManage.lockTask.table.operateName')+':'">
                  <el-select clearable
                             v-model="formData.operateId"
                             @change="currOperatorChange"
                             :placeholder="$t('taskManage.lockTask.selOperateName')">
                    <el-option v-for="item in operateOption"
                               :key="item.value"
                               :label="item.label"
                               :value="item.value">
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
            </el-row>
// 操作人选中项发生变化
    currOperatorChange(val) {
      console.log('操作人选中项发生变化', val)
      if (val) {
        let obj = {}
        obj = this.operateOption.find(item => {
          //这里的operateOption就是上面遍历的数据源
          return item.value === val //筛选出匹配数据
        })
        this.$set(this.formData, this.formData.operateId, val.value)
        this.formData.operateName = obj.label
        console.log('修改操作人名称', obj.label, obj.value)
      } else {
        this.formData.operateName = ''
        this.$set(this.formData, this.formData.operateId, '')
      }
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue折叠面板组件的封装

    Vue折叠面板组件的封装

    这篇文章主要为大家详细介绍了Vue折叠面板组件的封装,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 深入理解Vue transition源码分析

    深入理解Vue transition源码分析

    本篇文章主要介绍了深入理解Vue transition源码分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Vue中如何定义数据示例详解

    Vue中如何定义数据示例详解

    这篇文章主要给大家介绍了关于Vue中如何定义数据的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用vue具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09
  • vue+elementUI面包屑组件封装方法详解

    vue+elementUI面包屑组件封装方法详解

    这篇文章主要为大家详细介绍了vue+elementUI面包屑组件封装方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Vue Router解决多路由复用同一组件页面不刷新问题(场景分析)

    Vue Router解决多路由复用同一组件页面不刷新问题(场景分析)

    这篇文章主要介绍了Vue Router解决多路由复用同一组件页面不刷新问题,多路由复用同一组件的场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • vue接入下载文件接口问题

    vue接入下载文件接口问题

    这篇文章主要介绍了vue接入下载文件接口问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Vue脚手架搭建及创建Vue项目流程的详细教程

    Vue脚手架搭建及创建Vue项目流程的详细教程

    Vue脚手架指的是vue-cli,它是一个快速构建**单页面应用程序(SPA)**环境配置的工具,cli是(command-line-interfac)命令行界面,下面这篇文章主要给大家介绍了关于Vue脚手架搭建及创建Vue项目流程的相关资料,需要的朋友可以参考下
    2022-09-09
  • 浅谈vuex之mutation和action的基本使用

    浅谈vuex之mutation和action的基本使用

    本篇文章主要介绍了浅谈vuex之mutation和action的基本使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Vue中component标签解决项目组件化操作

    Vue中component标签解决项目组件化操作

    这篇文章主要介绍了Vue中component标签解决项目组件化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 一篇文章总结Vue3.2语法糖使用

    一篇文章总结Vue3.2语法糖使用

    Vue3.2(21年8月10日)相比于Vue3新增了语法糖,减少了代码冗余,下面这篇文章主要给大家介绍了关于Vue3.2语法糖使用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11

最新评论