Skip to content
On this page

MultiSelect

Example

Use v-model to bind selected values, and options as select options.

vue
<template>
  <MultiSelect v-model="selected" :options="options" />
</template>

<script setup>
import { MultiSelect } from 'uiv';
import { ref } from 'vue';

const selected = ref([]);
const options = ref([
  { value: 1, label: 'Option1' },
  { value: 2, label: 'Option2' },
  { value: 3, label: 'Option3' },
  { value: 4, label: 'Option4' },
  { value: 5, label: 'Option5' },
]);
</script>

Multiple Limit

Use limit to restrict the maximum number of options user can select, no limit when set to 0.

vue
<template>
  <MultiSelect v-model="selected" :options="options" :limit="3" />
</template>

<script setup>
import { MultiSelect } from 'uiv';
import { ref } from 'vue';

const selected = ref([]);
const options = ref([
  { value: 1, label: 'Option1' },
  { value: 2, label: 'Option2' },
  { value: 3, label: 'Option3' },
  { value: 4, label: 'Option4' },
  { value: 5, label: 'Option5' },
]);
</script>

Optional Sizes

Optional sizes sm and lg are supported. You can also add block prop to quickly apply width: 100% style to the component.

vue
<template>
  <div>
    <MultiSelect v-model="selected" :options="options" size="sm" />
  </div>
  <br />
  <div>
    <MultiSelect v-model="selected" :options="options" />
  </div>
  <br />
  <div>
    <MultiSelect v-model="selected" :options="options" size="lg" />
  </div>
  <br />
  <div>
    <MultiSelect v-model="selected" :options="options" size="lg" block />
  </div>
</template>

<script setup>
import { MultiSelect } from 'uiv';
import { ref } from 'vue';

const selected = ref([]);
const options = ref([
  { value: 1, label: 'Option1' },
  { value: 2, label: 'Option2' },
  { value: 3, label: 'Option3' },
  { value: 4, label: 'Option4' },
  { value: 5, label: 'Option5' },
]);
</script>

Disabled options

Add disabled: true to an option to make it unselectable.

vue
<template>
  <MultiSelect v-model="selected" :options="options" />
</template>

<script setup>
import { MultiSelect } from 'uiv';
import { ref } from 'vue';

const selected = ref([]);
const options = ref([
  { value: 1, label: 'Option1' },
  { value: 2, label: 'Option2' },
  { value: 3, label: 'Option3', disabled: true },
  { value: 4, label: 'Option4' },
  { value: 5, label: 'Option5', disabled: true },
]);
</script>

Disabled select

Add disabled to <multi-select> to disable the dropdown and click events.

vue
<template>
  <MultiSelect v-model="selected" :options="options" disabled />
</template>

<script setup>
import { MultiSelect } from 'uiv';
import { ref } from 'vue';

const selected = ref([]);
const options = ref([
  { value: 1, label: 'Option1' },
  { value: 2, label: 'Option2' },
  { value: 3, label: 'Option3' },
  { value: 4, label: 'Option4' },
  { value: 5, label: 'Option5' },
]);
</script>

Collapse selected

Collapse multiple selected items into a text by using collapse-selected prop.

vue
<template>
  <MultiSelect v-model="selected" :options="options" collapse-selected />
</template>

<script setup>
import { MultiSelect } from 'uiv';
import { ref } from 'vue';

const selected = ref([]);
const options = ref([
  { value: 1, label: 'Option1' },
  { value: 2, label: 'Option2' },
  { value: 3, label: 'Option3' },
  { value: 4, label: 'Option4' },
  { value: 5, label: 'Option5' },
]);
</script>

Option groups

If you need grouped options, simply add group (String) as the name to them.

vue
<template>
  <MultiSelect v-model="selected" :options="options" />
</template>

<script setup>
import { MultiSelect } from 'uiv';
import { ref } from 'vue';

const selected = ref([]);
const options = ref([
  { value: 1, label: 'Apple', group: 'Fruit' },
  { value: 2, label: 'Banana', group: 'Fruit' },
  { value: 3, label: 'Orange', group: 'Fruit' },
  { value: 4, label: 'Red', group: 'Color' },
  { value: 5, label: 'Green', group: 'Color' },
]);
</script>

Filterable

Add filterable to append filter input before options.

By default, options are filtered by item value and label (case ignored), use a custom filter-function to override it if needed.

vue
<template>
  <MultiSelect v-model="selected" :options="options" filterable />
</template>

<script setup>
import { MultiSelect } from 'uiv';
import { ref } from 'vue';

const selected = ref([]);
const options = ref([
  { value: 1, label: 'Option1' },
  { value: 2, label: 'Option2' },
  { value: 3, label: 'Option3' },
  { value: 4, label: 'Option4' },
  { value: 5, label: 'Option5' },
]);
</script>

API Reference

MultiSelect

Props

NameTypeDefaultRequiredDescription
v-modelArrayThe selected values.
optionsArrayThe select options.
label-keyStringlabelIdentity key name for label.
value-keyStringvalueIdentity key name for value.
limitBoolean0Maximum number of options user can select, no limit when set to 0.
sizeStringOptional sizes, supported: sm / lg.
blockBooleanfalseApply block level style.
placeholderStringSelect...The default text displayed when no options are selected.
splitString,The options display spliter.
filterableBooleanfalseAppend filter input before options (default is filter by item value and label, case ignored).
filter-placeholderStringSearch...The default text displayed in filter input.
filter-auto-focusBooleantrueAuto focus on filter input.
filter-functionFunctionCustom filter function, with one param as input string, and returns the filtered array.
disabledBooleanfalseDisable the select component.
collapse-selectedBooleanfalseCollapse multiple selected items into a text.
append-to-bodyBooleanfalseAppend the dropdown to body.
selected-iconStringglyphicon glyphicon-okIcon displayed in option while selected.
item-selected-classStringThe class applied to the selected list item.

Events

NameParamsDescription
changevalueTriggers when the selected value changes.
visible-changethe visible status (true / false)Triggers when the dropdown toggles.
limit-exceedTriggers when the selected value length exceeded limit.
focuseventTriggers when input focuses.
blureventTriggers when input blurs.

Slots

NameDescription
optionThe option scoped slot, with item prop.

Released under the MIT License.