A Vue.js search select component.
- Dependency only vue 2.x & lodash
- Design css use from https://github.com/Semantic-Org
- Support Vue.js 2.x
- Four Select Component
- BasicSelect
- simple search select
- ListSelect
- Can pass to Component custom list and customize display text
- Wrap BasicSelect component
- MultiSelect
- search select for multiple select
- MultiListSelect
- ListSelect for MultiSelect
- BasicSelect
- Add "placeholder" prop
- MultiSelect's search is case insensitive (BasicSelect also)
- MultiSelect and MultiListSelect emit last selected item.(pr#19)
- Now vue-search-select use events beyond props
http://moreta.github.io/vue-search-select/
npm install --save vue-search-select
or by yarn
yarn add vue-search-select
See More Samples : src/components/sample
<template>
<basic-select :options="options"
:selected-option="item"
placeholder="select item"
@select="onSelect">
</basic-select>
</template>
<script>
import { BasicSelect } from 'vue-search-select'
export default {
data () {
return {
options: [
{ value: '1', text: 'aa' + ' - ' + '1' },
{ value: '2', text: 'ab' + ' - ' + '2' },
{ value: '3', text: 'bc' + ' - ' + '3' },
{ value: '4', text: 'cd' + ' - ' + '4' },
{ value: '5', text: 'de' + ' - ' + '5' },
{ value: '6', text: 'ef' + ' - ' + '6' },
{ value: '10', text: 'ef' + ' - ' + '10' },
{ value: '11', text: 'ef' + ' - ' + '11' },
{ value: '12', text: 'ef' + ' - ' + '12' },
{ value: '13', text: 'down case' + ' - ' + 'testcase' },
{ value: '14', text: 'camel case' + ' - ' + 'testCase' },
{ value: '15', text: 'Capitalize case' + ' - ' + 'Testcase' }
],
searchText: '', // If value is falsy, reset searchText & searchItem
item: {
value: '',
text: ''
}
}
},
methods: {
onSelect (item) {
this.item = item
},
reset () {
this.item = {}
},
selectOption () {
// select option from parent component
this.item = this.options[0]
}
},
components: {
BasicSelect
}
}
</script>
<template>
<multi-select :options="options"
:selected-options="items"
placeholder="select item"
@select="onSelect">
</multi-select>
</template>
<script>
import _ from 'lodash'
import { MultiSelect } from 'vue-search-select'
export default {
data () {
return {
options: [
{ value: '1', text: 'aa' + ' - ' + '1' },
{ value: '2', text: 'ab' + ' - ' + '2' },
{ value: '3', text: 'bc' + ' - ' + '3' },
{ value: '4', text: 'cd' + ' - ' + '4' },
{ value: '5', text: 'de' + ' - ' + '5' },
{ value: '6', text: 'ef' + ' - ' + '6' },
{ value: '7', text: 'ef' + ' - ' + '7' },
{ value: '8', text: 'ef' + ' - ' + '8' },
{ value: '9', text: 'ef' + ' - ' + '9' },
{ value: '10', text: 'ef' + ' - ' + '10' },
{ value: '11', text: 'ef' + ' - ' + '11' },
{ value: '12', text: 'ef' + ' - ' + '12' },
{ value: '13', text: 'down case' + ' - ' + 'testcase' },
{ value: '14', text: 'camel case' + ' - ' + 'testCase' },
{ value: '15', text: 'Capitalize case' + ' - ' + 'Testcase' }
],
searchText: '', // If value is falsy, reset searchText & searchItem
items: [],
lastSelectItem: {}
}
},
methods: {
onSelect (items, lastSelectItem) {
this.items = items
this.lastSelectItem = lastSelectItem
},
// deselect option
reset () {
this.items = [] // reset
},
// select option from parent component
selectOption () {
this.items = _.unionWith(this.items, [this.options[0]], _.isEqual)
}
},
components: {
MultiSelect
}
}
</script>
# install dependencies
yarn install
# serve with hot reload at localhost:9090
npm run dev