Commit 2bdeea65ec622036b516561b45a455dd4aaa6b71

Authored by 梁灏
1 parent dcb48397

fix #4626 , close #4888

Showing 1 changed file with 18 additions and 3 deletions   Show diff stats
src/components/select/select.vue
... ... @@ -631,8 +631,8 @@
631 631 }
632 632 this.broadcast('Drop', 'on-update-popper');
633 633 setTimeout(() => {
634   - this.filterQueryChange = false;
635   - },300)
  634 + this.filterQueryChange = false;
  635 + }, ANIMATION_TIMEOUT);
636 636 },
637 637 onQueryChange(query) {
638 638 if (query.length > 0 && query !== this.query) this.visible = true;
... ... @@ -753,12 +753,27 @@
753 753  
754 754 // 当 dropdown 一开始在控件下部显示,而滚动页面后变成在上部显示,如果选项列表的长度由内部动态变更了(搜索情况)
755 755 // dropdown 的位置不会重新计算,需要重新计算
756   - this.broadcast('Drop', 'on-update-popper');
  756 + this.broadcast('Drop', 'on-update-popper');
757 757 },
758 758 visible(state){
759 759 this.$emit('on-open-change', state);
760 760 },
761 761 slotOptions(options, old){
  762 + // #4626,当 Options 的 label 更新时,v-model 的值未更新
  763 + if (options && options.length && this.values.length) {
  764 + this.values = this.values.map(value => {
  765 + const option = options.find(option => option.componentOptions.propsData.value === value.value);
  766 +
  767 + if(!option) return null;
  768 +
  769 + const label = getOptionLabel(option);
  770 + return {
  771 + value: value.value,
  772 + label: label
  773 + };
  774 + }).filter(Boolean);
  775 + }
  776 +
762 777 // 当 dropdown 在控件上部显示时,如果选项列表的长度由外部动态变更了,
763 778 // dropdown 的位置会有点问题,需要重新计算
764 779 if (options && old && options.length !== old.length) {
... ...