vue-suggestion
Suggestion list input for Vue.js, inspired by v-autocomplete.
Your search engine, your CSS, your everything...
demo.
CheckoutInstallation
- yarn:
yarn add vue-suggestion
- npm:
npm i --save vue-suggestion
Usage
- Import default
CSS
to your project:import 'vue-suggestion/dist/vue-suggestion.css';
- Import
vue-suggestion
into your Vue component and use it as normal:<template> ... <vue-suggestion></vue-suggestion> ... <template> <script> import VueSuggestion from 'vue-suggestion' export default { ... components: { VueSuggestion } } </script>
vue-form-generator.
!! You can also use it as a custom field ofProps
Property value | Type | Default value | Description |
---|---|---|---|
itemTemplate | vue component | Template for item in suggestion list | |
setLabel | function | Value of choosen input, be shown in the input | |
items | Array | [] | Suggestion array, should be updated dynamically after onInputChange() |
minLen | Interger | 2 | Minimun number of characters inputted to start searching |
disabled | Boolean | false | Disable the input |
placeholder | String | '' | Placeholder of the input |
Events
Property value | Arguments | Description |
---|---|---|
onInputChange | String | Fires when the input changes with the argument is the current input text. |
onItemSelected | Object | Fires when user selects a suggestion |
Slots
Name | Description |
---|---|
searchSlot | Next to the input, for the custom search icon or button... |
Style
Just overwrite their css classes:
.vue-suggestion .vue-suggestion-input-group .vue-suggestion-input .vue-suggestion-list .vue-suggestion-list-item &.vue-suggestion-item-active
Example
<template> <vue-suggestion :items="items" v-model="item", :setLabel="setLabel", :itemTemplate="itemTemplate", @onInputChange="inputChange", @onItemSelected="itemSelected"> </vue-suggestion> </template> <script> import itemTemplate from './item-template.vue'; export default { data () { return { item: {}, items: [ { id: 1, name: 'Golden Retriever'}, { id: 2, name: 'Cat'}, { id: 3, name: 'Squirrel'}, ], itemTemplate, } }, methods: { itemSelected (item) { this.item = item; }, setLabel (item) { return item.name; }, inputChange (text) { // your search method this.items = items.filter(item => item.name.contains(text)); // now `items` will be showed in the suggestion list }, }, }; </script>
ItemTemplate example:
<template> <div> <b>#{{item.id}}</b> <span>{{ item.name }}</span> </div> </template> <script> export default { props: { item: { required: true }, } } </script>
Demo Usage
# install dependencies $ yarn/npm install # compile demo for development $ yarn/npm dev # open Browser and start serve in demo $ yarn/npm demo:open # compile dist demo $ yarn/npm dist:demo # compile dist $ yarn/npm dist
Credits
made with ❤ by Steven.