Skip to content

Autocomplete ​

Поле ввода с выпадающим списком подсказок. Фильтрует варианты по мере ввода с поддержкой навигации клавиатурой.

vue
<script setup>
import { ref } from 'vue'

const value = ref('')
const options = ['Apple', 'Banana', 'Cherry', 'Date', 'Grape', 'Mango', 'Orange']
</script>

<template>
  <VxAutocomplete v-model="value" :options="options" placeholder="Search fruits..." clearable />
</template>

Object Options ​

Передавайте объекты с полями value и label.

vue
<script setup>
const countries = [
  { value: 'us', label: 'United States' },
  { value: 'gb', label: 'United Kingdom' },
  { value: 'de', label: 'Germany' },
]
</script>

<template>
  <VxAutocomplete v-model="value" :options="countries" placeholder="Search countries..." />
</template>

Select Event ​

Слушайте @select, чтобы получить полный выбранный элемент.

vue
<template>
  <VxAutocomplete v-model="value" :options="countries" @select="onSelect" />
</template>

Sizes ​

vue
<template>
  <VxAutocomplete size="sm" placeholder="Small" />
  <VxAutocomplete placeholder="Default" />
  <VxAutocomplete size="lg" placeholder="Large" />
</template>

Disabled Options ​

vue
<script setup>
const options = [
  { value: 'active', label: 'Active option' },
  { value: 'disabled', label: 'Disabled option', disabled: true },
]
</script>

<template>
  <VxAutocomplete :options="options" trigger-on-focus />
</template>

Trigger on Focus ​

Показывать все подсказки при фокусе на поле, даже без ввода текста.

vue
<template>
  <VxAutocomplete :options="options" trigger-on-focus placeholder="Click to see all..." />
</template>

Remote / Async ​

Используйте fetch-suggestions для асинхронной загрузки данных. Хорошо сочетается с debounce.

vue
<script setup>
async function fetchUsers(query) {
  const res = await fetch(`/api/users?q=${query}`)
  return res.json()
}
</script>

<template>
  <VxAutocomplete :fetch-suggestions="fetchUsers" :debounce="300" placeholder="Search users..." />
</template>

Disabled ​

vue
<template>
  <VxAutocomplete :options="options" disabled />
</template>

Custom Option Slot ​

vue
<template>
  <VxAutocomplete :options="countries" trigger-on-focus>
    <template #option="{ item, highlight }">
      <span class="flag">{{ item.value.toUpperCase() }}</span>
      <span v-html="highlight(item.label)" />
    </template>
  </VxAutocomplete>
</template>

Props ​

PropTypeDefaultDescription
modelValuestring''Значение поля ввода (v-model)
optionsstring[] | AutocompleteOption[][]Статический список вариантов
placeholderstring''Текст плейсхолдера
disabledbooleanfalseОтключить поле ввода
clearablebooleanfalseПоказывать кнопку очистки
size'sm' | 'default' | 'lg''default'Размер поля ввода
debouncenumber0Задержка debounce в мс
highlightbooleantrueПодсвечивать совпавший текст
emptyTextstring'No results'Текст при отсутствии совпадений
fetchSuggestions(query: string) => Option[] | Promise<Option[]>—Функция асинхронной загрузки
triggerOnFocusbooleanfalseПоказывать подсказки при фокусе
valueKeystring'value'Ключ объекта, используемый как значение

Events ​

EventTypeDescription
update:modelValue(value: string) => voidЗначение поля ввода изменилось
select(item: AutocompleteOption) => voidВариант выбран
focus(e: FocusEvent) => voidПоле ввода получило фокус
blur(e: FocusEvent) => voidПоле ввода потеряло фокус
clear() => voidПоле ввода очищено

Slots ​

SlotPropsDescription
option{ item, index, highlight }Кастомный рендеринг варианта
prefix—Кастомная иконка-префикс