検索を正しく行うのは難しい場合があります。 リアルタイムの結果をクライアントに配信したいのですが、そのためには、トリッキーなサーバー設定と大量のデータベースアクセス、または検索専用のサーバーが必要です。または、検索に使用するすべてのものを検索前にクライアントにアップロードします…または、 AlgoliaInstantSearchを使用することもできます。 (いいえ、これは何でもありません。)これは、インデックスを作成するデータをサーバーにプッシュできるホスト型ソリューションです。 そこから、非常にシンプルなコンポーネントを使用して、Vue.jsアプリにリアルタイム検索を追加できます。

見てみましょう。

入門

vue-cliwebpack-simpleテンプレートを使用して単純なVueプロジェクトを開始します。

次に、インストールします vue-instantsearch.

# Yarn
$ yarn add vue-instantsearch
# NPM
$ npm install vue-instantsearch --save

設定

次に、プラグインを有効にします main.js. とてもシンプルです。

main.js
import Vue from 'vue';
import App from './App.vue';
import InstantSearch from 'vue-instantsearch';

Vue.use(InstantSearch);

new Vue({
  template: '<router-view></router-view>'
})
.$mount('#app');

App.vue、アルゴリアの最も基本的な設定を使用して検索するセクションを追加しましょう。

vue-instantsearch 「実際の」レンダリング可能なコンポーネントを仮想コンポーネントにラップするreactスタイルのラッパーコンポーネントを使用して、子供たちにデータと機能を提供します。

最初に必要なのは ais-index. これにより、AlgoliaInstantSearchが結果を見つけるために必要な接続情報が提供されます。 あなたはあなたを見つけることができます app-id, api-keyindex-name アカウントを設定してそこにインデックスを作成している場合は、Algoliaダッシュボードで。 今のところ、提供されたデモ資格情報を使用します。

次のコンポーネントは ais-search-box. それは(驚きの)検索ボックスをレンダリングします。 (さらに、ちょっとした検索とクリアボタン。)

続いて ais-results 成分。 これは少し面白いです。 スコープスロットを使用して、レンダリングする独自の検索結果テンプレートを提供できるようにします。 つまり、検索結果に画像のURLがある場合は、 img タグを付けてsrcプロパティとブームを設定し、画像で結果を検索します。

ここでの最後のコンポーネントは ais-highlight. 特定のプロパティの一致した部分をラップします( attribute-name)結果オブジェクトで <em></em> タグ。 (カスタマイズ可能です。)つまり、検索した場合 Something 結果オブジェクトは次のようになります。

{
  "name": "The Book of Something"
}

結果の出力は次のようになります。 <p>The book of <em>something</em><p>. ハイライトは手動で実装するのにイライラする機能なので、すぐにサポートできるのは素晴らしいことです。

App.vue
<template>
  <div id="app">
    <img src="./assets/logo.png">
    <h1>{{ msg }}</h1>
    <h2>Essential Links</h2>
    <ul>
      <li><a href="https://vuejs.org" target="_blank">Core Docs</a></li>
      <li><a href="https://forum.vuejs.org" target="_blank">Forum</a></li>
      <li><a href="https://chat.vuejs.org" target="_blank">Community Chat</a></li>
      <li><a href="https://twitter.com/vuejs" target="_blank">Twitter</a></li>
    </ul>
    <h2>Ecosystem</h2>
    <ul>
      <li><a href="http://router.vuejs.org/" target="_blank">vue-router</a></li>
      <li><a href="http://vuex.vuejs.org/" target="_blank">vuex</a></li>
      <li><a href="http://vue-loader.vuejs.org/" target="_blank">vue-loader</a></li>
      <li><a href="https://github.com/vuejs/awesome-vue" target="_blank">awesome-vue</a></li>
    </ul>

    <h2>Search For Stuff</h2>
    <ais-index
      app-id="latency"
      api-key="3d9875e51fbd20c7754e65422f7ce5e1"
      index-name="bestbuy"
    >
      <ais-search-box></ais-search-box>
      <ais-results>
        <template slot-scope="{ result }">
          <p>
            <ais-highlight :result="result" attribute-name="name"></ais-highlight>
          </p>
        </template>
      </ais-results>
    </ais-index>
  </div>
</template>
...

あなたがそれをしたら、あなたは終了するはずです! 開発サーバーを起動し、検索ボックスに何かを入力すると、結果がほぼ瞬時にレンダリングされるのを確認できます。

あとは、APIキーを自分の所有するものに切り替えるだけです。他の利用可能なコンポーネントのいくつかを試してみてくださいスタイルを設定してくださいカスタムコンポーネントを作成してください、楽しんでね!