Commit 7f63e58ced806a28e730483ab8dfa26ebce0057b
1 parent
cf753854
Make possible for v-model to wait for async options
Showing
1 changed file
with
13 additions
and
2 deletions
Show diff stats
src/components/select/select.vue
... | ... | @@ -179,9 +179,13 @@ |
179 | 179 | this.$on('on-select-selected', this.onOptionClick); |
180 | 180 | |
181 | 181 | // set the initial values if there are any |
182 | - if (this.values.length > 0 && !this.remote){ | |
182 | + if (this.values.length > 0 && !this.remote && this.selectOptions.length > 0){ | |
183 | 183 | this.values = this.values.map(this.getOptionData); |
184 | 184 | } |
185 | + | |
186 | + if (this.values.length > 0 && this.selectOptions.length === 0){ | |
187 | + this.hasExpectedValue = this.values; | |
188 | + } | |
185 | 189 | }, |
186 | 190 | data () { |
187 | 191 | |
... | ... | @@ -198,6 +202,7 @@ |
198 | 202 | slotOptions: this.$slots.default, |
199 | 203 | caretPosition: -1, |
200 | 204 | lastRemoteQuery: '', |
205 | + hasExpectedValue: false, | |
201 | 206 | }; |
202 | 207 | }, |
203 | 208 | computed: { |
... | ... | @@ -337,7 +342,7 @@ |
337 | 342 | }, |
338 | 343 | getOptionData(value){ |
339 | 344 | const option = this.flatOptions.find(({componentOptions}) => componentOptions.propsData.value === value); |
340 | - if (!option) return {}; | |
345 | + if (!option) return null; | |
341 | 346 | const textContent = option.componentOptions.children.reduce((str, child) => str + (child.text || ''), ''); |
342 | 347 | const label = option.componentOptions.propsData.label || textContent || ''; |
343 | 348 | return { |
... | ... | @@ -603,6 +608,12 @@ |
603 | 608 | }, |
604 | 609 | dropVisible(open){ |
605 | 610 | this.broadcast('Drop', open ? 'on-update-popper' : 'on-destroy-popper'); |
611 | + }, | |
612 | + selectOptions(){ | |
613 | + if (this.hasExpectedValue){ | |
614 | + this.values = this.values.map(this.getOptionData); | |
615 | + this.hasExpectedValue = false; | |
616 | + } | |
606 | 617 | } |
607 | 618 | } |
608 | 619 | }; | ... | ... |