Как настроить Algolia так, чтобы он не возвращал никаких результатов, если запрос пуст? Laravel & Vue Instant Search
Привет, я использую Algolia в своем новом проекте Laravel, но я понимаю, что Algolia отображает все данные, которые у меня есть " Titel - description ".
То, что я хочу, это только отображать результат, когда я что-то набираю в окне поиска
мой HTML-код
<div id="app">
<!-- Components will go here -->
<ais-index app-id="{{ config('scout.algolia.id') }}"
api-key="{{ env('ALGOLIA_SEARCH') }}"
index-name="posts">
<ais-search-box placeholder="Find products..."></ais-search-box>
<ais-results>
<template slot-scope="{ result }">
<div>
<h4>@{{ result.progName }}</h4>
<ul>
<li>@{{ result.description }}</li>
</ul>
</div>
</template>
</ais-results>
</ais-index>
</div>
Почтовая модель
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
class Post extends Model
{
//
use Searchable;
}
1 ответ
Решение
Вы должны заменить ais-results
компонентом, который скрывает его на основе запроса. Компонент выглядит примерно так:
<!-- MyResults.vue -->
<template>
<div v-if="query.length > 0">
<slot name="header"></slot>
<slot name="default" v-for="(result, index) in results" :result="result" :index="index">
{{index}}. Result 'objectID': {{ result.objectID }}
</slot>
<slot name="footer"></slot>
</div>
</template>
<script>
import { Component } from 'vue-instantsearch';
export default {
mixins: [Component],
computed: {
query() {
return this.searchStore.query;
},
results() {
return this.searchStore.results;
},
},
};
</script>
Затем замените ваше использование для ais-results
с вашим собственным my-results
составная часть:
<div id="app">
<!-- Components will go here -->
<ais-index app-id="{{ config('scout.algolia.id') }}"
api-key="{{ env('ALGOLIA_SEARCH') }}"
index-name="posts">
<ais-search-box placeholder="Find products..."></ais-search-box>
<my-results>
<template slot-scope="{ result }">
<div>
<h4>@{{ result.progName }}</h4>
<ul>
<li>@{{ result.description }}</li>
</ul>
</div>
</template>
</my-results>
</ais-index>
</div>