Vuetify is a popular UI framework for Vue apps.
In this article, we’ll look at how to work with the Vuetify framework.
Modal
We can create a modal dialog with the persistent
prop.
For example, we can write:
<template>
<v-container>
<v-row>
<v-col col="12">
<v-row justify="center">
<v-dialog v-model="dialog" persistent max-width="290">
<template v-slot:activator="{ on, attrs }">
<v-btn color="primary" dark v-bind="attrs" v-on="on">Open Dialog</v-btn>
</template>
<v-card>
<v-card-title class="headline">Title</v-card-title>
<v-card-text>Lorem ipsum.</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="green darken-1" text @click="dialog = false">Cancel</v-btn>
<v-btn color="green darken-1" text @click="dialog = false">OK</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</v-row>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
dialog: false,
}),
};
</script>
We have the persistent
prop on the v-dialog
to make it closeable only with the buttons inside.
Scrollable
To make a dialog scrollable, we just add a scrollable
prop.
For example, we can write:
<template>
<v-container>
<v-row>
<v-col col="12">
<v-row justify="center">
<v-dialog v-model="dialog" scrollable max-width="290">
<template v-slot:activator="{ on, attrs }">
<v-btn color="primary" dark v-bind="attrs" v-on="on">Open Dialog</v-btn>
</template>
<v-card>
<v-card-title>Select Country</v-card-title>
<v-divider></v-divider>
<v-card-text style="height: 300px;">
<v-radio-group v-model="country" column>
<v-radio :label="c" :value="c" v-for="(c, i) of countries" :key="i"></v-radio>
</v-radio-group>
</v-card-text>
<v-spacer></v-spacer>
<v-card-actions>
<v-btn color="green darken-1" text @click="dialog = false">Cancel</v-btn>
<v-btn color="green darken-1" text @click="dialog = false">OK</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</v-row>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
dialog: false,
country: "",
countries: [
"Afghanistan",
"Albania",
"Algeria",
"American Samoa",
"Andorra",
"Angola",
"Anguilla",
"Antarctica",
"Antigua and Barbuda",
"Argentina",
"Armenia",
"Aruba",
"Australia",
"Austria",
"Azerbaijan",
],
}),
};
</script>
We display a radio button group that overflows the v-card-text
container.
So we add the scrollable
prop to the v-dialog
to make the radio button group scrollable.
Overflowed
If the modal doesn’t fit the available window space, then the container will be scrolled.
Form
We can add a form inside the v-dialog
component.
For instance, we can write:
<template>
<v-container>
<v-row>
<v-col col="12">
<v-row justify="center">
<v-dialog v-model="dialog" persistent max-width="600px">
<template v-slot:activator="{ on, attrs }">
<v-btn color="primary" dark v-bind="attrs" v-on="on">Open Dialog</v-btn>
</template>
<v-card>
<v-card-title>
<span class="headline">User Profile</span>
</v-card-title>
<v-card-text>
<v-container>
<v-row>
<v-col cols="12" sm="6" md="4">
<v-text-field label="first name*" required></v-text-field>
</v-col>
<v-col cols="12" sm="6" md="4">
<v-text-field label="middle name" hint="middle name"></v-text-field>
</v-col>
<v-col cols="12" sm="6" md="4">
<v-text-field label="last name*" hint="last name" persistent-hint required></v-text-field>
</v-col>
<v-col cols="12">
<v-text-field label="Email*" required></v-text-field>
</v-col>
<v-col cols="12">
<v-text-field label="Password*" type="password" required></v-text-field>
</v-col>
<v-col cols="12">
<v-select :items="['0-17', '18-29', '30-54', '54+']" label="Age*" required></v-select>
</v-col>
</v-row>
</v-container>
<small>*required field</small>
</v-card-text>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="blue darken-1" text @click="dialog = false">Close</v-btn>
<v-btn color="blue darken-1" text @click="dialog = false">Save</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</v-row>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
dialog: false,
}),
};
</script>
to add a form inside the v-dialog
.
This way, we’ll see the form when we open the dialog.
Conclusion
We can create a dialog with various kinds of content and behavior with Vuetify.