[ElemeFE/element][Bug Report] el-select组件在options数据异步加载时,input里的文案不能正常回显

2024-08-14 940 views
4
Element UI version

2.15.7

OS/Browsers version

Chorme最新

Vue version

2.6.14

https://codepen.io/jaysding/pen/eYGExMW

在value里先设定一个初始值id,然后在setTimeout里的数据回显之前,点击select的input框,然后等待options数据回显,options回来之后发现input框里的文案不能更新成label的文案

回显后input框里的文案更新成label的文案

回显后input框里的文案仍然是value的文案

回答

9

遇到了相似的问题! 只要在数据没返回时打开了下拉(下面用setTimeout模拟),数据不能正常回填。

<el-select v-model="value" placeholder="请选择">
    <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>

data() {
      return {
        options: [],
        value: ''
      }
    },
    mounted() {
      setTimeout(() => {
         this.value = '选项1';
        this.options = [{ value: '选项1', label: '黄金糕' }, { value: '选项2', label: '双皮奶'  }];
      }, 5000)
    }
  }
1

这个问题有解吗?我看element-plus也有这个问题,人都麻了

4

相同问题,不过复现方式不一样:

  1. select框,有选项A,B,C,选中了A
  2. 更新option,有选项D,E,F.
  3. 此时显示的内容仍旧是A
0

遇到了相同的问题,只要列表接口返回的数据慢就回显不了label。本来是封装成了业务组件,后来没办法只能提前调用列表接口,然后把列表数据传到select里。

5

我修复了这个Bug,不知道啥时候能 merge,大家可以一起 review 下

2

pr地址发一下康康

9

1.给select设置一个key,options数据更新后刷新key——解决无法更新显示label问题 2.设置remote、filterable为true,动态更新options下拉列表。此时不要更新key(避免下拉框自动收起),在visible-change事件里面监听visible=false时再更更新key

<el-select v-model="value" placeholder="请选择" :key="selectKey"  :remote="true" filterable @visible-change="visibleChange">
    <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
data() {
    return {
      options: [],
      value: '',
      selectKey: 1
    };
  },
  mounted() {
    setTimeout(() => {
      this.value = '选项1';
      this.options = [
        {value: '选项1', label: '黄金糕'},
        {value: '选项2', label: '双皮奶'}
      ];
      this.selectKey++;
    }, 5000);
  },
  methods: {
    visibleChange(visible) {
      if (!visible) {
        this.selectKey++;
      } else {
        setTimeout(() => {
          // 更新下拉框
          this.options = [
            {value: '选项1', label: '黄金糕'},
            {value: '选项2', label: '双皮奶'},
            {value: '选项3', label: '莲子粥'},
            {value: '选项4', label: '豆沙包'},
          ];
        }, 2000);
      }
    }
  }
};