Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
@vueform/multiselect
Advanced tools
Vue 3 multiselect component with single select, multiselect and tagging options.
Vueform is form library for Vue 2 & 3 with 30+ elements, file uploads, element nesting, 50+ validators, conditions, form steps and many more including reactive configuration, API access and ESM modules. Check out our live demos or see all the features and sign up for beta to get early access.
npm install @vueform/multiselect
<template>
<div>
<Multiselect
v-model="value"
:options="options"
/>
</div>
</template>
<script>
import Multiselect from '@vueform/multiselect'
export default {
components: {
Multiselect,
},
data() {
return {
value: null,
options: [
'Batman',
'Robin',
'Joker',
]
}
}
}
</script>
<style src="@vueform/multiselect/themes/default.css"></style>
When using with Vue 2 make sure to install @vue/composition-api first and change the imported module to:
import Multiselect from '@vueform/multiselect/dist/multiselect.vue2.js'
Name | Type | Default | Description |
---|---|---|---|
appendNewTag | boolean | true | Whether should append new tag automatically to multiselect's options when using tags mode with createTag . If set to false you need to take care of appending a new tag to the :options list upon @tag event. |
caret | boolean | true | Whether should display a caret (small triangle on the right). |
clearOnSearch | boolean | false | Whether the option list should be cleared upon a new typed character when using async options. |
clearOnSelect | boolean | true | Whether the option list should be cleared upon selecting an option when using async options. |
createTag | boolean | false | Whether should allow creating new tag based on search query when using tags mode. |
delay | number | -1 | The delay that should occur between the last typed character and refreshing an async option list. If -1 the option list will not refresh when the search query changes. If 0 it will refresh without delay. The number refers to milliseconds . |
disabled | boolean | false | Whether the input should be disabled. |
filterResults | boolean | true | Whether option list should be filtered by search query. This may be set to false if you are handling filtering when returning async options. |
hideSelectedTag | boolean | true | Whether selected tags should be excluded from the list when using tags mode. |
id | string | 'multiselect' | The id of the multiselect container DOM. |
label | string | 'label' | If you provide an array of objects as options this property of those objects will be displayed for options and selected label. |
limit | number | -1 | The maximum number of options that should be displayed. If -1 it won't be limited. |
loading | boolean | false | Whether a loading spinner should be shown. |
maxHeight | number | 160 | The maximum height of options list. |
minChars | number | 0 | The minimum number of characters that should be typed to refresh async option list. If 0 it will refresh even when the search field becomes empty. |
mode | string | single | Possible values: single|multiple|tags . |
modelValue | string|number|array | null | The variable that should store the select value when using Vue 3. If v-model is used it does not need to be set. |
multipleLabel | function | A function that should return how the label should be displayed when using multiple mode. It receives value as an argument. By default it renders 1 option selected and [n] options selected based on value length. | |
noOptionsText | string | 'The list is empty' | The text that should be displayed when options list is empty. |
noResultsText | string | No results found | The text that should be when there are no search results. |
object | boolean | false | Whether the value should be stored as an object. If set to false while using an array of objects as :options the value property will be used as value. If set to true without using an array of objects as :options an object that contains value property along with :trackBy 's and :label 's value will be set as value. |
options | array|object|function | [] | List of options. Can be: - an array (eg. [1,2,3] )- an object (eg. {a:1,b:2,c:3} )- an array of objects [{value:1,label:'v1'},{value:2,label:'v2'},{value:3,label:'v3'}] - a sync or async function with query input param that returns options as an object or as an array of objects.When an array of objects is provided it must have a value property as well as properties that equal to :trackBy 's and :label 's value (both configurable and default to label ). |
placeholder | string | null | The text that should be displayed before an options are selected. |
resolveOnLoad | boolean | true | Whether async options should be loaded initially (with an empty query). This should be true if you are planning to load non-object value initially while using async options. |
searchable | boolean | false | Whether the options should be searchable. |
trackBy | string | label | The name of the property that should be searched when searchable is true and an array of objects are provided as :options . |
value | string|number|array | null | The variable that should store the select value when using Vue 2. If v-model is used it does not need to be set. |
Event | Attributes | Description |
---|---|---|
@close | Emitted after closing the option list. | |
@deselect | option | Emitted after an option is deselected or a tag is removed. |
@input | value | Emitted after the value is changed. |
@open | Emitted after opening the option list. | |
@search-change | query | Emitted after a character is typed. |
@select | option | Emitted after an option or tag is selected. |
@tag | query | Emitted after enter is hit when a new tag is being created. |
Slot | Attributes | Description |
---|---|---|
afterList | Rendered after the options list. | |
beforeList | Rendered before the options list. | |
multipleLabel | values | Rendered when using multiple mode and options are selected. By default it renders the return value of multipleLabel function. |
noOptions | Rendered when the options list is empty. By default renders noOptionsText . | |
noResults | Rendered when there are no search results. By default renders noResultsText . | |
option | option, search | Renders an option in options list. |
singleLabel | value | Rendered when using single mode and an option is selected. By default it renders the :label if the selected option. |
tag | option, remove, disabled | Renders a tag when using tags mode. When disabled the remove icon should not be displayed. The remove prop should be used to trigger the removal of the tag. |
<template>
<div>
<Multiselect
v-model="value"
placeholder="Select your character"
:options="options"
/>
</div>
</template>
<script>
import Multiselect from '@vueform/multiselect'
export default {
components: { Multiselect },
data() {
return {
value: null,
options: ['Batman', 'Robin', 'Joker']
}
}
}
</script>
<style src="@vueform/multiselect/themes/default.css"></style>
<template>
<div>
<Multiselect
v-model="value"
placeholder="Select your character"
:options="options"
/>
</div>
</template>
<script>
import Multiselect from '@vueform/multiselect'
export default {
components: { Multiselect },
data() {
return {
value: null,
options: {
batman: 'Batman',
robin: 'Robin',
joker: 'Joker'
}
}
}
}
</script>
<style src="@vueform/multiselect/themes/default.css"></style>
<template>
<div>
<Multiselect
v-model="value"
placeholder="Select your character"
label="name"
trackBy="name"
:options="options"
:searchable="true"
>
<template v-slot:singleLabel="{ value }">
<div class="multiselect-single-label">
<img height="26" style="margin: 0 6px 0 0;" :src="value.icon"> {{ value.name }}
</div>
</template>
<template v-slot:option="{ option }">
<img height="22" style="margin: 0 6px 0 0;" :src="option.icon">{{ option.name }}
</template>
</Multiselect>
</div>
</template>
<script>
import Multiselect from '@vueform/multiselect'
export default {
components: { Multiselect },
data() {
return {
value: null,
options: [
{ value: 'captainamerica', name: 'Captain America', icon: 'https://cdn2.iconfinder.com/data/icons/avengers-filled/48/03_-_Captain_America_-_infinity_war_-_end_game_-_marvel_-_avengers_-_super_hero-512.png' },
{ value: 'spiderman', name: 'Spiderman', icon: 'https://cdn2.iconfinder.com/data/icons/avengers-filled/48/12_-_Spiderman_-_infinity_war_-_end_game_-_marvel_-_avengers_-_super_hero-512.png' },
{ value: 'ironman', name: 'Iron Man', icon: 'https://cdn2.iconfinder.com/data/icons/avengers-filled/48/02_-_IRONMAN_-_infinity_war_-_end_game_-_marvel_-_avengers_-_super_hero-512.png' },
]
}
}
}
</script>
<style src="@vueform/multiselect/themes/default.css"></style>
<template>
<div>
<Multiselect
v-model="value"
mode="multiple"
placeholder="Select your characters"
:options="options"
/>
</div>
</template>
<script>
import Multiselect from '@vueform/multiselect'
export default {
components: { Multiselect },
data() {
return {
value: [],
options: ['Batman', 'Robin', 'Joker']
}
}
}
</script>
<style src="@vueform/multiselect/themes/default.css"></style>
<template>
<div>
<Multiselect
v-model="value"
mode="multiple"
placeholder="Select your characters"
:options="options"
>
<template v-slot:multipleLabel="{ values }">
<div class="multiselect-multiple-label">
{{ values.length }} characters selected
</div>
</template>
</Multiselect>
</div>
</template>
<script>
import Multiselect from '@vueform/multiselect'
export default {
components: { Multiselect },
data() {
return {
value: [],
options: ['Batman', 'Robin', 'Joker']
}
}
}
</script>
<style src="@vueform/multiselect/themes/default.css"></style>
<template>
<div>
<Multiselect
v-model="value"
mode="tags"
placeholder="Select your characters"
:options="options"
:search="true"
/>
</div>
</template>
<script>
import Multiselect from '@vueform/multiselect'
export default {
components: { Multiselect },
data() {
return {
value: [],
options: ['Batman', 'Robin', 'Joker']
}
}
}
</script>
<style src="@vueform/multiselect/themes/default.css"></style>
<template>
<div>
<Multiselect
v-model="value"
mode="tags"
placeholder="Select your characters"
:options="options"
:searchable="true"
:createTag="true"
/>
</div>
</template>
<script>
import Multiselect from '@vueform/multiselect'
export default {
components: { Multiselect },
data() {
return {
value: [],
options: ['Batman', 'Robin', 'Joker']
}
}
}
</script>
<style src="@vueform/multiselect/themes/default.css"></style>
v1.1.2
2020-12-19
FAQs
Vue 3 multiselect component with single select, multiselect and tagging options.
The npm package @vueform/multiselect receives a total of 69,127 weekly downloads. As such, @vueform/multiselect popularity was classified as popular.
We found that @vueform/multiselect demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.