Фильтрация опций

Vs Vue3 Select предлагает два параметра принимающих функции, которые можно использовать для реализации пользовательских алгоритмов фильтрации.

  • filter
  • filterBy

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

Фильтрация с помощью Fuse.js

Вы можете использовать параметры filter и filterBy, чтобы подключить сторонние инструменты. Например: Fuse.jsopen in new window. Которое может производить поиск по нескольким объектным ключам с нечеткими соответствиями.

<template>
  <v-select
    :filter="fuseSearch"
    :options="books"
    :get-option-label="(option) => option.title"
  >
    <template #option="{ author, title }">
      {{ title }}
      <cite>{{ author.firstName }} {{ author.lastName }}</cite>
    </template>
  </v-select>
</template>

<script setup>
import Fuse from 'fuse.js'
import books from '../data/books'

const fuseSearch = (options, search) => {
  const fuse = new Fuse(options, {
    keys: ['title', 'author.firstName', 'author.lastName'],
    shouldSort: true,
  })
  return search.length ? fuse.search(search).map(({ item }) => item) : fuse.list
}
</script>
<style scoped>
cite {
  display: block;
}
</style>