背景・課題
- 漢字でリスト表示していても、ひらがな入力時点でサジェストさせたい
- 漢字に変換するまでサジェストがされないのが不便すぎる
vue-simple-suggestのサジェストをカスタマイズする
使っていたのは、vue-simple-suggest
でした。既にスタイルが当たっていたのでどうにかしてこれを使いたかったです。
https://github.com/KazanExpress/vue-simple-suggest
結論としては、display-attribute
と、filter
を指定すれば実装できました。
(ドキュメントに書いてあるけど、filterの指定はわからなさすぎてソースコード読みました )
display-attribute
で、どのkeyの値をサジェストのリストに表示するかを指定できます。
filter
は入力された値に対してリストの値をどう返すか処理が書けます。
以下は、listDataが[{ name: "hogehoge", kana: "ほげほげ"}]
みたいな配列になっている前提でのサンプルコードです。(nuxt.js)
<vue-simple-suggest
:value="value"
display-attribute="name"
:list="listData"
:filter="vueSimpleSuggestfilter"
:filter-by-query="true"
:max-suggestions="100"
/>
data () {
return {
listData: [{ name: "hogehoge", kana: "ほげほげ"}]
}
},
methods: {
vueSimpleSuggestfilter (el, value) {
return el.name.indexOf(value) !== -1 || el.kana.indexOf(value) !== -1 ? el : false
},
el
にlist
で指定した値が一つずつ入ってきて、value
に入力値が入ってきます。
returnした値がサジェストのリストとして表示されます。
拡張したら、カタカナとかアルファベットも追加できますね