Quasar is a popular Vue UI library for developing good looking Vue apps.
In this article, we’ll take a look at how to create Vue apps with the Quasar UI library.
Dark Mode
We can enable dark mode with the $q.dark.set method:
<!DOCTYPE html>
<html>
<head>
<link
href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons"
rel="stylesheet"
type="text/css"
/>
<link
href="https://cdn.jsdelivr.net/npm/quasar@1.12.13/dist/quasar.min.css"
rel="stylesheet"
type="text/css"
/>
</head>
<body class="body--dark">
<script src="https://cdn.jsdelivr.net/npm/vue@^2.0.0/dist/vue.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/quasar@1.12.13/dist/quasar.umd.min.js"></script>
<div id="q-app">
<div class="q-pa-md"></div>
</div>
<script>
new Vue({
el: "#q-app",
data: {},
beforeMount() {
this.$q.dark.set(true);
}
});
</script>
</body>
</html>
true will turn on dark mode and false will turn it off.
Dialog
We can add a dialog with the $q.dialog method:
<!DOCTYPE html>
<html>
<head>
<link
href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons"
rel="stylesheet"
type="text/css"
/>
<link
href="https://cdn.jsdelivr.net/npm/quasar@1.12.13/dist/quasar.min.css"
rel="stylesheet"
type="text/css"
/>
</head>
<body class="body--dark">
<script src="https://cdn.jsdelivr.net/npm/vue@^2.0.0/dist/vue.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/quasar@1.12.13/dist/quasar.umd.min.js"></script>
<div id="q-app">
<div class="q-pa-md">
<q-btn label="Confirm" color="primary" @click="confirm"></q-btn>
<q-btn label="Prompt" color="primary" @click="prompt"></q-btn>
</div>
</div>
<script>
new Vue({
el: "#q-app",
data: {},
methods: {
confirm() {
this.$q
.dialog({
title: "Confirm",
message: "Would you like to turn on the wifi?",
cancel: true,
persistent: true
})
.onOk(() => {
console.log("OK");
})
.onOk(() => {
console.log("Second OK catcher");
})
.onCancel(() => {
console.log("Cancel");
})
.onDismiss(() => {
console.log("I am triggered on both OK and Cancel");
});
},
prompt() {
this.$q
.dialog({
title: "Prompt",
message: "What is your name?",
prompt: {
model: "",
type: "text"
},
cancel: true,
persistent: true
})
.onOk((data) => {
console.log("OK, received", data);
})
.onCancel(() => {
console.log("Cancel");
})
.onDismiss(() => {
console.log("I am triggered on both OK and Cancel");
});
}
}
});
</script>
</body>
</html>
The title property sets the title.
message sets the dialog message.
cancel adds a Cancel button when it’s set to true .
persistent makes the dialog persistent.
And we can watch the events emitted from the dialogs with the onOK , onCancel and onDismiss methods.
The prompt property lets us show an input with the prompt.
We get the data from the data parameter from the onOK callback with the prompt dialog.
We can set the dark property to true to enable dark mode.
Radio, Checkboxes, and Toggles
We can add dialogs that let users select options with radio buttons, checkboxes, and toggles.
To add them, we write:
<!DOCTYPE html>
<html>
<head>
<link
href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons"
rel="stylesheet"
type="text/css"
/>
<link
href="https://cdn.jsdelivr.net/npm/quasar@1.12.13/dist/quasar.min.css"
rel="stylesheet"
type="text/css"
/>
</head>
<body class="body--dark">
<script src="https://cdn.jsdelivr.net/npm/vue@^2.0.0/dist/vue.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/quasar@1.12.13/dist/quasar.umd.min.js"></script>
<div id="q-app">
<div class="q-pa-md">
<q-btn label="Radio" color="primary" @click="radio"></q-btn>
<q-btn label="Checkbox" color="primary" @click="checkbox"></q-btn>
<q-btn label="Toggle" color="primary" @click="toggle"></q-btn>
</div>
</div>
<script>
new Vue({
el: "#q-app",
data: {},
methods: {
radio() {
this.$q
.dialog({
title: "Options",
message: "Choose an option:",
options: {
type: "radio",
model: "opt1",
items: [
{ label: "Option 1", value: "opt1", color: "secondary" },
{ label: "Option 2", value: "opt2" },
{ label: "Option 3", value: "opt3" }
]
},
cancel: true,
persistent: true
})
.onOk((data) => {
console.log("OK, received", data);
});
},
checkbox() {
this.$q
.dialog({
title: "Options",
message: "Choose your options:",
options: {
type: "checkbox",
model: [],
items: [
{ label: "Option 1", value: "opt1", color: "secondary" },
{ label: "Option 2", value: "opt2" },
{ label: "Option 3", value: "opt3" }
]
},
cancel: true,
persistent: true
})
.onOk((data) => {
console.log("OK, received", data);
});
},
toggle() {
this.$q
.dialog({
title: "Options",
message: "Choose your options:",
options: {
type: "toggle",
model: [],
items: [
{ label: "Option 1", value: "opt1", color: "secondary" },
{ label: "Option 2", value: "opt2" },
{ label: "Option 3", value: "opt3" }
]
},
cancel: true,
persistent: true
})
.onOk((data) => {
console.log("OK, received", data);
});
}
}
});
</script>
</body>
</html>
We just add the options.items property to add the options.
And we change the control type to show with the options.type property.
We get the selected item from the data parameter from the onOK callback.
Conclusion
We can add dark mode and dialogs with the Quasar library into our Vue app.