Reputation: 21
I'm starting to make a multiselect
without any package ...
When I create a select multiple, it is necessary key ctrl
for select multiple elements.
I hate this ...
Can I make it with a function?
<template>
<select multiple v-model="selected">
<option v-for="item in items" v-bind:key="item.id">{{item.name}}</option>
</select>
</template>
<script>
export default {
name: 'SelectMultiple',
props: {
items: Array,
},
data(){
return{
selected: ['option1']
}
},
}
</script>
Upvotes: 0
Views: 526
Reputation: 23500
You can try with :value
instead v-model and use method on click event for selecting:
Vue.component('myselect', {
template: `
<div>
<select multiple :value="selected" @click="selection">
<option v-for="item in items" :key="item.id" :selected="isSelected(item.name)">{{item.name}}</option>
</select>
{{selected}}
</div>
`,
props: {
items: Array,
},
data(){
return{
selected: ['option1']
}
},
methods: {
isSelected(item) {
return this.selected.includes(item)
},
selection(e) {
const el = e.target.value;
if(this.selected.includes(el)){
this.selected = this.selected.filter(s => s !== el)
} else {
this.selected = [...this.selected, el]
}
}
}
})
new Vue({
el: "#demo",
data(){
return{
items: [{id:1, name:'option1'}, {id:2, name:'option2'}, {id:3, name:'option3'}, {id:4, name:'option4'}, {id:5, name:'option5'}]
}
},
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="demo">
<myselect :items="items"></myselect>
</div>
Upvotes: 2