【Vue.js】Element Uiでautocompleteのサジェスト機能を導入する方法と使い方!

この記事からわかること
- Vue.jsのElement Uiの機能
- autocompleteの導入方法と使い方
- v-modelとリンクづける方法
\ アプリをリリースしました /
豊富なコンポーネントと導入のしやすさから人気のVue.jsのUIライブラリの1つ「Element Ui」。
その中の「autocomplete」を使おうとした際に試行錯誤した部分と導入方法、使い方も併せてまとめておきます。
Element Uiでautocompleteを導入しよう!

Element Ui自体の導入方法はここでは割愛します。詳しくはこちらの記事をご覧ください。
ライブラリの導入ができたら「autocomplete」を使用できるように設定をしていきます。プロジェクトの中の「src」>「plugins」>「element.js」に追記していきます。
オンデマンドインストールの「element.js」
オンデマンドインストールでのElement Uiでは「element.js」に使いたいコンポーネントを追加していくだけでOKです。これで<el-autocomplete>
タグが使用可能になりました。
el-autocompleteの使い方と特徴
el-autocompleteはinput要素にサジェスト(入力アシスト)機能を追加できるコンポーネントです。
使用方法は簡単で公式ページのデモコードをそのままコピペして貼り付けるだけで動作してくれます。そのままコピペすると2つのタイプのautocompleteが動きます。
- Input要素をアクティブ時に全てのサジェストが出るタイプ
- 入力された文字を識別して該当のサジェストが出るタイプ
公式ページのデモコード
デフォルトで用意されているメソッドとその役割と意味は以下の通りだと思います。
メソッドの意味
- querySearch:入力文字のフィルター検索実行
- createFilter:マッチ検索フィルター本体
- loadAll:フィルターデータ
- handleSelect:選択されたサジェストを表示
サジェストデータをAPIで取得させる
実際にデモコードを使ってカスタマイズしてみます。今回はAPIで連想配列を取得しサジェストのデータに組み込んでいきます。
Laravelのweb.phpとコントローラーを編集しURL/api/category
で以下のような連想配列を返すように設定しておきます。
web.php
ApiController
今回はデータベースに格納しているカテゴリテーブルの全値を取得させています。
続いてVuexを使って管理している「src」>「store」>「index.js」に以下のように記述します。
これで$store.state.links
でAPIで取得している連想配列に参照することができます。
今回はサジェストで選択された連想配列値のcategory_idをdataのcategory_id
に格納するのを目標にしていきます。
v-on(@)
でサジェストから選択された時とフォーカスが外れた時のイベントを補足し、checkPost
を呼び出します。
checkPost
の引数に変数を渡せば、選択されたサジェストのidとvalueを受け取ることができます。
v-model
を使ってinput要素のvalue属性とdata変数の中身をリンクさせようとしましたがサジェストで選択された値はv-modelの中には自動で格納されないようでした。
なので47行目の部分でdata変数の中に入れ込んでおく必要がありました。
実際にElement Uiを使って作ったのが以下のwebアプリです。サジェスト機能も使っているので除いてみてください!

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。