lahma
@lahma
Фронтенд

Поиск на сайте. Как сделать «ничего не найдено»?

Привет.
Сделал поиск с помощью computed()
Не пойму как быть когда ничего не найдено?

Сейчас когда находится:

66c73b4b95c66374921219.png

Сейчас когда ничего не находится:

66c73b5510f34110188158.png

<script setup lang='ts'>
import { ref, computed } from 'vue'
import { useAxios } from '@vueuse/integrations/useAxios'

import InputText from 'primevue/inputtext'
import Image from 'primevue/image'

const {
  data,
  isLoading,
  isFinished,
  error
} = useAxios('https://fakestoreapi.com/products')

const searchQuery = ref('')

const filteredProducts = computed(() => {
  if (!searchQuery.value.length) {
    return
  }

  if (searchQuery.value.length > 2) {
    return data.value.filter((product: any) => product.title.toLowerCase().includes(searchQuery.value.toLowerCase())) 
  }
})

console.log(filteredProducts)

</script>

<template>
  <div class="search">
    <InputText v-model="searchQuery" placeholder="search" fluid />

    <ul v-if="filteredProducts" class="search-result">
      
      <li v-for="product in filteredProducts">
        
        <div>
          <Image :src="product.image" :alt="product.title" width="40" height="40" />
        </div>
        
        <h3>{{ product.title }}</h3>
        
        <div>
          <p>{{ product.price }}</p>
        </div>
      </li>
    </ul>

  </div>
</template>
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
const filteredProducts = computed(() => {
  const search = searchQuery.value.toLowerCase();
  return search.length > 2
    ? data.value.filter(n => n.title.toLowerCase().includes(search))
    : null;
});

<ul v-if="filteredProducts" class="search-result">
  <li v-if="!filteredProducts.length">
    <h3>ничего не найдено</h3>
  </li>
  <li v-for="n in filteredProducts">
    <div>
      <Image :src="n.image" :alt="n.title" width="40" height="40" />
    </div>
    <h3>{{ n.title }}</h3>
    <div>
      <p>{{ n.price }}</p>
    </div>
  </li>
</ul>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@setupx
Go & TS developer
Если у тебя есть v-if="filteredProducts", сделай v-else, который выведет "Ничего не найдено"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы