Select Button
CSelectButton is used to choose single or multiple items from a list using buttons.
Basic Usage
CSelectButton is used with the v-model property for two-way value binding along with the options collection. Label and value of an option are defined with the option-label and optionValue properties respectively.
TIP
Note that, when options are simple primitive values such as a string array, no option-label and optionValue would be necessary.
vue
<template>
<CSelectButton
v-model="value"
:options="options"
/>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const value = ref('One-Way');
const options = ref(['One-Way', 'Return']);
</script>Multiple Selection
CSelectButton allows selecting only one item by default and setting multiple option enables choosing more than one item. In multiple case, model property should be an array.
vue
<template>
<CSelectButton
v-model="value"
:options="options"
option-label="name"
multiple
/>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const value = ref([]);
const options = ref([
{ name: 'Option 1', value: 1 },
{ name: 'Option 2', value: 2 },
{ name: 'Option 3', value: 3 }
]);
</script>Option Template
Label of an option is used as the display text of an item by default, for custom content support define an option template that gets the option instance as a parameter.
vue
<template>
<CSelectButton
v-model="value"
:options="options"
option-label="value"
option-value="value"
>
<template #option="slotProps">
<i :class="slotProps.option.icon"></i>
</template>
</CSelectButton>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { PrimeIcons } from '@primevue/core/api';
const value = ref(null);
const options = ref([
{ icon: PrimeIcons.ALIGN_LEFT, value: 'Left' },
{ icon: PrimeIcons.ALIGN_RIGHT, value: 'Right' },
{ icon: PrimeIcons.ALIGN_CENTER, value: 'Center' },
{ icon: PrimeIcons.ALIGN_JUSTIFY, value: 'Justify' }
]);
</script>Sizes
CSelectButton provides small and large sizes as alternatives to the base.
vue
<template>
<div class="card flex flex-col items-center gap-4">
<CSelectButton v-model="value1" :options="options" size="small" />
<CSelectButton v-model="value2" :options="options" />
<CSelectButton v-model="value3" :options="options" size="large" />
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const value1 = ref(null);
const value2 = ref('Beginner');
const value3 = ref('Expert');
const options = ref(['Beginner', 'Expert']);
</script>Invalid
Invalid state is displayed using the invalid prop to indicate a failed validation. You can use this style when integrating with form validation libraries.
vue
<template>
<CSelectButton
v-model="value"
:options="options"
allowEmpty
:invalid="value === null"
/>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const value = ref(null);
const options = ref(['One-Way', 'Return']);
</script>Disabled
When disabled is present, the element cannot be edited and focused entirely.
vue
<template>
<CSelectButton
v-model="value"
:options="options"
disabled
/>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const value = ref(null);
const options = ref(['Off', 'On']);
</script>Disabled Option
Certain options can also be disabled using the optionDisabled property.
vue
<template>
<CSelectButton
v-model="value"
:options="options"
options-disabled="constant"
option-label="name"
/>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const value = ref(null);
const options = ref([
{ name: 'Option 1', value: 1, constant: false },
{ name: 'Option 2', value: 2, constant: true }
]);
</script>