From 68c1c84875c0f84a7e277719a24b0c825f539b2f Mon Sep 17 00:00:00 2001 From: Leopoldthecoder Date: Tue, 3 Jan 2017 23:28:42 +0800 Subject: [PATCH] Select: fix allowCreate bug --- packages/select/src/option.vue | 4 ++-- packages/select/src/select.vue | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/select/src/option.vue b/packages/select/src/option.vue index d9ccafb33..b9e1e142a 100644 --- a/packages/select/src/option.vue +++ b/packages/select/src/option.vue @@ -88,10 +88,10 @@ watch: { currentLabel() { - this.dispatch('ElSelect', 'setSelected'); + if (!this.created) this.dispatch('ElSelect', 'setSelected'); }, value() { - this.dispatch('ElSelect', 'setSelected'); + if (!this.created) this.dispatch('ElSelect', 'setSelected'); } }, diff --git a/packages/select/src/select.vue b/packages/select/src/select.vue index ec2658cb0..69c5f9b5f 100644 --- a/packages/select/src/select.vue +++ b/packages/select/src/select.vue @@ -98,6 +98,7 @@ import { addClass, removeClass, hasClass } from 'element-ui/src/utils/dom'; import { addResizeListener, removeResizeListener } from 'element-ui/src/utils/resize-event'; import { t } from 'element-ui/src/locale'; + import merge from 'element-ui/src/utils/merge'; const sizeMap = { 'large': 42, 'small': 30, @@ -191,6 +192,8 @@ return { options: [], cachedOptions: [], + createdOption: null, + createdSelected: false, selected: this.multiple ? [] : {}, isSelect: true, inputLength: 20, @@ -276,7 +279,12 @@ if (!this.multiple) { this.getOverflows(); if (this.selected) { - this.selectedLabel = this.selected.currentLabel; + if (this.filterable && this.allowCreate && + this.createdSelected && this.createdOption) { + this.selectedLabel = this.createdOption.currentLabel; + } else { + this.selectedLabel = this.selected.currentLabel; + } if (this.filterable) this.query = this.selectedLabel; } } @@ -371,6 +379,12 @@ setSelected() { if (!this.multiple) { let option = this.getOption(this.value); + if (option.created) { + this.createdOption = merge({}, option); + this.createdSelected = true; + } else { + this.createdSelected = false; + } this.selectedLabel = option.currentLabel; this.selected = option; return; @@ -382,6 +396,9 @@ }); } this.selected = result; + this.$nextTick(() => { + this.resetInputHeight(); + }); }, handleIconClick(event) {