vue-suggestion
Suggestion list input for Vue.js, inspired by v-autocomplete.
Your search engine, your CSS, your everything...
Checkout demo.
Installation
- 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>
!! You can also use it as a custom field of vue-form-generator.
Props
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
onInputChange | String | Fires when the input changes with the argument is the current input text. |
onItemSelected | Object | Fires when user selects a suggestion |
Slots
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) {
this.items = items.filter(item => item.name.contains(text));
},
},
};
</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
$ yarn/npm install
$ yarn/npm dev
$ yarn/npm demo:open
$ yarn/npm dist:demo
$ yarn/npm dist
Credits
made with ❤ by Steven.