Инициализировать vue v-select, прежде чем запрос параметров разрешится

#vue.js #vuetify.js

#vue.js #vuetify.js

Вопрос:

Я создаю SPA с помощью vue и firebase, и одно из представлений — это datatable с фильтром по данным в выпадающем списке.

Данные загружаются довольно медленно, поэтому я хочу, чтобы v-select заполнял значение по умолчанию (которое является идентификатором и именем фильтра), прежде чем запрос, возвращающий все параметры фильтров, разрешится.

Я пробовал несколько подходов, но я не понимаю, почему этот не работает. Каков правильный способ сделать это?

Примечание: важно, чтобы значение фильтра имело как имя, так и идентификатор, поскольку идентификатор управляет логикой фильтрации данных

 <template>
   <v-select 
      :items="items" 
      v-model="currentItem" 
      item-value="id" 
      item-text="name" 
      label="MySelector">
   </v-select>
   [...]
   <v-data-table> The data table elements are filtered using the value of v-select.</v-data-table>
</template>

<script>
   export default {
      props: {
         currentItem:{
            Array,
            default: () => {return {id:"rtegergergrg2r", name:"default-name"}
         },
      },

      computed:{
         items() { ... some slow query that returns a [{id:name}] }

         }
   }
</script>

  

Я также попытался вернуть значение по умолчанию в items . Это не работает, и v-select отображается как пустой при загрузке страницы (снимок экрана).

введите описание изображения здесь

Ответ №1:

В этом случае не лучшая идея запускать запрос в вычисляемом свойстве. Я бы сделал это так:

 export default {
    props: {
        currentItem: { type: Array, default: () => { id: 'default-id', name: 'default-name' }
    },
    data () {
        return {
            items: [
                { id: 'default-id', name: 'default-name' }
            ]
        }
    },
    created () {
        this.items = // some slow query that returns a value
    }
}
  

Таким образом, вы уверены, что у вас будет некоторое значение по умолчанию, видимое в фильтре.

Кроме того, я немного обеспокоен использованием v-model с реквизитами. Это может привести к появлению предупреждения о прямом изменении реквизитов, а это никуда не годится.