Vuetify is a popular UI framework for Vue apps.
In this article, we’ll look at how to work with the Vuetify framework.
Mandatory List Item
We can add the mandatory
prop to make choosing an item mandatory:
<template>
<v-container class="grey lighten-5">
<v-row>
<v-col>
<v-list flat>
<v-list-item-group v-model="model" color="indigo" active-class="border">
<v-list-item v-for="(item, i) in items" :key="i">
<v-list-item-icon>
<v-icon v-text="item.icon"></v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title v-text="item.text"></v-list-item-title>
</v-list-item-content>
</v-list-item>
</v-list-item-group>
</v-list>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
items: [
{
icon: "mdi-wifi",
text: "Wifi",
},
{
icon: "mdi-bluetooth",
text: "Bluetooth",
},
{
icon: "mdi-chart-donut",
text: "Data Usage",
},
],
model: undefined
}),
};
</script>
Custom Active Class
The active-class
prop can be set to set a custom class for an active item.
For example, we can write:
<template>
<v-container class="grey lighten-5">
<v-row>
<v-col>
<v-list flat>
<v-list-item-group v-model="model" color="indigo" active-class="border">
<v-list-item v-for="(item, i) in items" :key="i">
<v-list-item-icon>
<v-icon v-text="item.icon"></v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title v-text="item.text"></v-list-item-title>
</v-list-item-content>
</v-list-item>
</v-list-item-group>
</v-list>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
items: [
{
icon: "mdi-wifi",
text: "Wifi",
},
{
icon: "mdi-bluetooth",
text: "Bluetooth",
},
{
icon: "mdi-chart-donut",
text: "Data Usage",
},
],
model: undefined
}),
};
</script>
<style scoped>
.border {
border: 1px solid red;
}
</style>
We just added the border
class to see a red outline.
Slide Groups
The v-slide-group
component is used to display paginated information.
For instance, we can write:
<template>
<v-container class="grey lighten-5">
<v-row>
<v-col>
<v-sheet class="mx-auto" elevation="8" max-width="800">
<v-slide-group
v-model="model"
class="pa-4"
prev-icon="mdi-minus"
next-icon="mdi-plus"
show-arrows
>
<v-slide-item v-for="n in 15" :key="n" v-slot:default="{ active, toggle }">
<v-card
:color="active ? 'primary' : 'grey lighten-1'"
class="ma-4"
height="200"
width="100"
@click="toggle"
>
<v-row class="fill-height" align="center" justify="center">
<v-scale-transition>
<v-icon
v-if="active"
color="white"
size="48"
v-text="'mdi-close-circle-outline'"
></v-icon>
</v-scale-transition>
</v-row>
</v-card>
</v-slide-item>
</v-slide-group>
</v-sheet>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
model: undefined,
}),
};
</script>
to add the v-slide-group
component with the v-slide-item
components inside for the items.
We use the active
boolean to check if the item is selected.
And the toggle
function lets us toggle the active
state.
Conclusion
We can group items with list item groups and slide item groups.