Commit 7f63e58ced806a28e730483ab8dfa26ebce0057b

Authored by Sergio Crisostomo
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 };
... ...